JVM 类加载过程详解

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,

下面我们就分别来看一下这 五个阶段中JVM到底做了些什么事情?

加载: 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对 象,作为方法区这个类的各种数据的入口。

验证:这一阶段的主要目的是为了确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并 且不会危害虚拟机自身的安全。

准备:准备阶段是正式为类变量分配内存并设置类变量的初始值阶段,即在方法区中分配这些变量所使 用的内存空间。注意这里的类变量的初始值容易产生混淆,我们举个例子吧,

private static int a=10 这行代码在准备阶段初始值的时候a=0(a=10所对应的put static 指令是放在类构造方法中的)

private static final a=10 这行代码在准备阶段初始值 a=10

解析:解析阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程。这里需要解释下 符号引用和直接引用的区别。直接引用我们就不讲了,重点讲一下符号引用。

符号引用:一个java文件被编译成class文件的时候,并不知道所引用类的实际地址,所以只能用符号来代替,比如一个com.org.Demo类中引用com.org.people类,在编译时 并不知道com.org.people类对应的实际地址,所以用符号(类似于CONSTANT_Class_info的常量)来表示的。

初始化:初始化阶段是类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载 器以外,其它操作都由JVM主导。到了初始阶段,才开始真正执行类中定义的Java程序代码。

总结:注意理解重点

1.准备阶段中的初始化值;

2.解析阶段的符号引用


分享到:


相關文章: