《深入理解jvm》笔记---第七章

虚拟机类载入机制

1. 类的生命周期:

  载入、验证、准备、解析、初始化、使用、卸载七个阶段。当中验证、准备、解析三个阶段统称为连接。


当中,解析的阶段的时机并不一定。

2. Java类载入的时机:

 Java类载入的时机Java虚拟机规范并没有强调,可是对于初始化阶段,虚拟机规范则严格限定了有且仅仅有5种情况必须马上对类进行初始化:



这五种场景的行为称为对一个类进行主动引用。

3. 类载入的过程:

  ①载入:在载入阶段。虚拟机须要做一下三件事情:


②验证:验证的目的是为了确保Class文件的字节流中包括的信息符合当前虚拟机的要求,而且不会危害虚拟机自身的安全。

主要包括:

 ⑴




⑶字节码验证:字节码验证是整个验证过程最复杂的阶段,主要目的是通过对数据流和控制流的分析,确定程序语义是否是合法的、符合逻辑的。


③准备:

  准备阶段是给类变量分配内存并设置类变量初始值的阶段。这些变量使用的内存都将在方法区中进行分配。首先须要强调的是。这时候进行内存分配的仅仅有类变量(静态变量),不包含实例变量。

其次。这里所说的初始值“通常情况”下是该类型数据的零值,如果一个类变量定义为:public static int value=123; ,那么value在准备阶段后的值是0而不是123,把value赋值为123是在类构造器<cinit>()方法中才開始做的,也就是在初始化阶段才開始运行。基本数据类型的零值例如以下:



④解析:解析阶段是把常量池内的符号引用替换为直接引用的过程。

⑤初始化:初始化是类载入过程的最后一个阶段,初始化阶段是运行类构造器<cinit>()方法的过程。


 




【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/yjbjingcha/p/8279863.html