标签:
1. 类的生命周期:
加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析三个阶段统称为连接。
其中,解析的阶段的时机并不一定。
2. Java类加载的时机:
Java类加载的时机Java虚拟机规范并没有强调,但是对于初始化阶段,虚拟机规范则严格限定了有且只有5种情况必须立即对类进行初始化:
这五种场景的行为称为对一个类进行主动引用。
3. 类加载的过程:
①加载:在加载阶段,虚拟机需要做一下三件事情:
②验证:验证的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。主要包括:
⑴
⑵
⑶字节码验证:字节码验证是整个验证过程最复杂的阶段,主要目的是通过对数据流和控制流的分析,确定程序语义是否是合法的、符合逻辑的。
⑷
③准备:
准备阶段是给类变量分配内存并设置类变量初始值的阶段,这些变量使用的内存都将在方法区中进行分配。首先需要强调的是,这时候进行内存分配的只有类变量(静态变量),不包括实例变量。其次,这里所说的初始值“通常情况”下是该类型数据的零值,假设一个类变量定义为:public static int value=123; ,那么value在准备阶段后的值是0而不是123,把value赋值为123是在类构造器<cinit>()方法中才开始做的,也就是在初始化阶段才开始执行。基本数据类型的零值如下:
④解析:解析阶段是把常量池内的符号引用替换为直接引用的过程。
⑤初始化:初始化是类加载过程的最后一个阶段,初始化阶段是执行类构造器<cinit>()方法的过程。
标签:
原文地址:http://blog.csdn.net/nlznlz/article/details/51082249