类加载过程

作者: JumpBorderLine | 来源:发表于2019-08-19 11:21 被阅读0次

    1、加载

    构建类的字节码对象,类型为Class类型。将class字节码文件加载到内存中,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个class对象代表这个类,作为方法区类数的访问入口。

    2、连接

    将Java类的二进制代码合并到JVM的运行状态之中。

    2.1 验证

    检查类加载信息是否符合JVM规范,无安全方面的问题。

    检查文件格式、元数据、字节码、符号引用验证。

    2.2 准备

    可能会初始化类中的静态变量(类变量),也可能会执行类中的静态代码块(具体是否执行由加载方式决定)。

    为类的静态变量分配内存,并将其初始化默认值。

    2.3 解析

    虚拟机常量池内的符号引用替换为直接引用的过程。

    3、初始化

    执行类构造器的<clinit>()方法。(由类加载器负责将类加载到内存中)。

    为类的静态变量赋予正确的初始值。

    Java程序初始化顺序:

    1、父类的静态变量

    2、父类的静态代码块

    3、子类的静态变量

    4、子类的静态代码块

    5、父类的非静态变量

    6、父类的非静态代码块

    7、父类的构造方法

    8、子类的非静态变量

    9、子类的非静态代码块

    10、子类的构造方法

    详细类加载代理模式(双亲委派机制模型)参考:https://www.jianshu.com/p/dd39654231e0

    相关文章

      网友评论

        本文标题:类加载过程

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