标签:
加载:
校验:
Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全,魔数,元数据校验;-Xverifynone参数来关闭大部分的类验证措施
准备:
准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配
解析:解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程
初始化:
初始化阶段是执行类构造器<clinit>()方法的过程
<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块static{}中的语句合并产生的
虚拟机规范严格规定了有且只有5中情况(jdk1.7)必须对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):
不会触发初始化:
1.通过数组定义来引用类,不会触发此类的初始化
2.常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化
3.子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。
对象的实例化在类的初始化之前,嵌套初始化,类的静态变类为本类变类的情况
标签:
原文地址:http://www.cnblogs.com/lelouchKOP/p/5790694.html