美文网首页
10.10类加载器

10.10类加载器

作者: 205蚁 | 来源:发表于2018-11-18 17:01 被阅读0次

java高级-类加载器

1.classloader
程序不会一次性加载所有的.class文件,.class文件有入口方法。而是根据程序需要根据java的加载机制动态的加载某一个.class文件到内存中

1.什么是类加载器
    ClassLoader就是用来动态加载class文件到内存当中使用
2.类加载类型
    BootStrap ClassLoader;启动类的加载器,负责加载放在jdk一个叫li目录下的文件,能被虚拟机识别的一个类, 这个类不继承ClassLoader类,它的底层是c++编写的
    Extension ClassLoader:扩展加载器,主要是负责加载jia(还是jin)目录下的ext的目录,可以直接使用这个扩展类加载器
    App ClassLoader:应用程序加载器, 负责加载应用用户路径下所指定的类,所以可以直接使用这个类加载器
    
    第二个分类(站在java虚拟机的角度)
    1.启动类加载器
        BootStrap ClassLoader,c++实现,属于虚拟机内的一部分
        所有其他的类加载器,java实现,独立于虚拟机之外,继承ClassLoader,这些加载器需要启动类加载器 加载完成之后,才能加载其他的类
3.双亲委托模型
    图:
    他们之间的父子关系并不是通过继承来实现的,而是通过组合关系来复用 加载器中的代码
    
    工作流程:比如说 有一个类加载器收到了要加载java的.classw文件要求,它首先不会自己的尝试加载这个类,而是请求委托给父加载器去完成,所有的加载请求都会传递到顶层的启动类加载器中,只有类加载器在它的搜索范围内没有找到所需要的类时,它无法完成加载,这时 它的子加载器才会尝试去加载。
    
    使用双亲委托模型它能组织类加载器之间的关系,它有一个明显的好处,java类随着类加载器一起具备了一种带层次的关系,这对于保护程序的稳定性非常重要。
    
4.类加载的过程
    图:
        7个阶段
        加载、验证、准备、解析、初始化、使用、卸载
        
        加载、验证、准备、初始化这四个阶段是确定的,而解析不是,它在某些情况下可以在初始化阶段之后来开始,这是为了能支持java语言的动态绑定,
        
        使用、卸载 是在所有顺序定完了之后再执行
        
        静态绑定
        动态绑定
    第一步:加载
        1.通过一个类的全限定名来获取其定义的二进制字节流
        2.将这个字节流所代表的静态存储结构转化为运行时的数据结构
        3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口
        
        既可以使用系统加载器加载,也可以自定义加载器加载
        
    第二部:验证  
        1.为了确保Class文件中的字节流包含的信息符合当前虚拟机的要求
        2.文件格式的验证、元数据的验证、字节码验证和符号引用验证
    第三部:准备
        1.对基本数据类型。如果不显示的赋值,会赋默认值
        2.对于同时被static 和final修饰的常量,必须显示的为其赋值,否则编译不通过
                只被final修饰的变量,可以在类初始化时赋值,不会被默认赋值
        3.对于引用数据类型 reference,默认值null
        4.在数据初始化时,如果没有赋值, 默认数据里头的值是0
        
    第四部:解析
        解析阶段是虚拟机将常量池中的符号转化为直接引用的过程
        
        图:
            本类-》接口-》父接口-》。。。--》父类-》祖父类-》。。。
            类解析、接口解析、类中方法解析、接口中方法解析
        
        1.类和接口的解析
            首先判断锁转换的直接引用 是数组类型,还是普通对象类型引用,从而进行不同的解析
        2.字段解析
            肯定会在本类中查找,是否包含简单名称,字段描述都符合的字段,如果有,则查找结束,如果没有,按照继承关系从上往下一次查找
        3.类方法解析。类方法解析的搜索步骤和字段搜索差不多
            判断该方法是类,还是接口的方法。对类的方法的匹配顺序,是先搜索父类,再搜索接口
        4.接口方法解析
            递归向上搜索接口
        5.初始化
            初始化阶段是执行类构造器 方法的过程

相关文章

网友评论

      本文标题:10.10类加载器

      本文链接:https://www.haomeiwen.com/subject/gxpgfqtx.html