Android专栏面试题Java

类加载过程

2019-08-19  本文已影响0人  JumpBorderLine

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

上一篇下一篇

猜你喜欢

热点阅读