美文网首页
【笔记】深入理解 java 虚拟机---虚拟机对象探秘

【笔记】深入理解 java 虚拟机---虚拟机对象探秘

作者: 张航_8ee7 | 来源:发表于2018-01-02 14:22 被阅读0次

    对象在堆上创建。

    对象的创建包括以下几步:

    1 分配内存 。包括两种方式,指针碰撞(Bump the Point ),空闲列表(Free List)。如果 虚拟机自己支持 压缩内存的话,分配方式是 指针碰撞。为了保证线程安全,先预先给线程分配空间。称为TLAB(Thread local Allocation Buffer)。

    2 初始化为零值(便于Java代码中不赋予初始值就可以使用)

    3虚拟机设置对象头给对象(元数据,对象的哈希码,分配的GC年龄)

    4执行方法。

    对象在内存中的布局分布

    1 对象头。存jvm需要的对象的信息。

    2 实例数据。就是代码产生象信息。

    3 占位符。jvm 要求起始地址必须是8的整数倍。

    对象的访问定位

    1 句柄访问。 reference 到 句柄 到 对象。 句柄里放对象地址。

    2 直接访问。 reference 到 对象。

    句柄,如果对象地址改动,不用更改reference 的值,只改变句柄里的值。这里 改变句柄里的代价 肯定要远小于改变reference的代价。不然没必要。

    相关文章

      网友评论

          本文标题:【笔记】深入理解 java 虚拟机---虚拟机对象探秘

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