美文网首页
JVM 字节码-03 init和clinit

JVM 字节码-03 init和clinit

作者: 丿易小易 | 来源:发表于2020-12-12 10:40 被阅读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

    image

    init 与 clinit 都是用来初始化

    init 初始化: 实例构造器,对非静态变量解析初始化

    以下还没有经过校验

    • new()
    • 反射 new instance()
    • 调用clone builder().build()
    • 调用objectinputStream.getObject()

    clinit 初始化: class类构造器对静态变量,静态代码块进行初始化...

    类静态常量与静态代码块会被收集到这里(未初始化的静态常量不会写入到常量池)

    image
    image image

    这里的static是 public static String NAME_INIt = "hello world";的初始化

    且在常量池中只有一个clinit, 是NAME_INIt的变量初始化后生成

    相关文章

      网友评论

          本文标题:JVM 字节码-03 init和clinit

          本文链接:https://www.haomeiwen.com/subject/vwyegktx.html