JAVA对象初始化过程

2018-03-13  本文已影响0人  katkrazy
    1.虚拟机遇到一条new指令时,首先回去检查这个指令的参数是否能在常量池定位到一个类的符号引用,并且检查这个符号代表的类是否已被加载,解析和初始化过,如果没有,要进行相应的[类加载机制(待补充)](http://example.com/ "Title")。
    2.在类加载检查通过后,虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后就可以完全确定(虚拟机可以通过对象头的元数据信息确定对象的大小)。这里又涉及到Java堆内存的分配方式,指针碰撞和空闲列表,以及线程安全的分配内存修改指针的解决方案,CAS+失败重试和本地线程分配缓冲TLAB。
    3.内存分配完成后,虚拟机会将分配到的内存空间全初始化为零值,基本数据类型是0,引用类型是null。
    4.对对象头进行设置,分为两部分,一部分是mark word,包含对象的哈希码、分代年龄、锁标志位,另一部分是class metadata,存储类的元数据信息。
    5.执行对象的构造方法
上一篇下一篇

猜你喜欢

热点阅读