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

对象在堆上创建。

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

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的代价。不然没必要。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容