美文网首页Java虚拟机Android开发Android知识
《深入理解Java虚拟机》-类加载机制

《深入理解Java虚拟机》-类加载机制

作者: gatsby_dhn | 来源:发表于2016-10-06 11:06 被阅读163次

    虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。这里说的class文件可以是任何符合class文件格式的二进制字节流。

    类加载时机

    虚拟机严格规定了以下情况必须对类进行加载:
    1.遇到new关键字,读取或设置类的静态字段,调用类的静态方法
    2.对类进行反射调用时,如果类没有进行初始化,则先触发初始化
    3.初始化类时先初始化父类
    4.虚拟机启动时,必须先初始化主类

    类加载过程

    加载-->验证-->准备-->解析-->初始化-->使用-->卸载

    加载

    当类加载时机成熟,会将class字节流加载到内存方法区,形成适当的数据结构。具体完成以下3件事:
    1.通过类的全局限定名获取定义此类的二进制字节流
    2.将代表这个字节流的静态存储结构转化为方法区的运行时数据结构
    3.在内存中(HotSpot虚拟机实现中在方法区)生成一个代表这个类的java.lang.Class对象,作为方法区这个类的访问入口。

    验证

    验证阶段确保二进制字节流包含的信息符合虚拟机的要求,不会对虚拟机造成危害。

    准备

    该阶段为类变量分配内存并设置类变量的初始值。比如public static int value = 11,这个阶段过后value这个初始值为0。引用变量的值设置为null。

    解析

    将符号引用(可以看做是相对引用)解析为直接引用(实际的内存地址)。

    初始化

    该阶段执行类变量的赋值上面的例子public static int value = 11该阶段后value的值为11,。同时执行静态语句块。

    卸载

    当该类不存在实例,且加载该类的类加载器对象被回收,则方法区中的这块内存可以被垃圾回收。

    参考:《深入理解Java虚拟机》

    相关文章

      网友评论

        本文标题:《深入理解Java虚拟机》-类加载机制

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