JVM 字节码-03 init和clinit
2020-12-12 本文已影响0人
丿易小易
代码
public class MainTest {
public static String NAME_INIt = "hello world";
public static String NAME;
public static void main(String[] args) {
System.out.println("你好!");
}
}
命令 ==> javap -v MainTest.class
imageinit 与 clinit 都是用来初始化
init 初始化: 实例构造器,对非静态变量解析初始化
以下还没有经过校验
- new()
- 反射 new instance()
- 调用clone builder().build()
- 调用objectinputStream.getObject()
clinit 初始化: class类构造器对静态变量,静态代码块进行初始化...
类静态常量与静态代码块会被收集到这里(未初始化的静态常量不会写入到常量池)
imageimage image
这里的static是 public static String NAME_INIt = "hello world";的初始化
且在常量池中只有一个clinit, 是NAME_INIt的变量初始化后生成