JVM7-对象的创建

- 对象创建的流程步骤包括哪些:

 

    1- 虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用

      - 判断这个类是否已被加载、解析和初始化

    2- 为这个新生对象在Java堆中分配内存空间,其中Java堆分配内存空间的方式主要有以下两种

       - 指针碰撞

            - 分配内存空间包括开辟一块内存和移动指针两个步骤

            - 非原子步骤可能出现并发问题,Java虚拟机采用CAS配上失败重试的方式保证更新操作的原子性

 

        - 空闲列表

            - 分配内存空间包括开辟一块内存和修改空闲列表两个步骤

            - 非原子步骤可能出现并发问题,Java虚拟机采用CAS配上失败重试的方式保证更新操作的原子性

 

    3- 将分配到的内存空间都初始化为零值(int=0  string=null boolean=false……)

    4- 设置对象头相关数据

        * GC分代年龄

        * 对象的哈希码 hashCode

        * 元数据信息

    5- 执行对象<init>方法(static区域的执行)

 

posted @ 2019-06-20 14:37  valar-dohaeris  阅读(84)  评论(0编辑  收藏  举报