第三篇:对象在内存中的布局

一.对象布局的组成
1)对象头
包括哈希吗、GC分代年龄、锁状态标记、线程持有的锁等等。
另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针,确定该类 具体是哪个类。
2)实例数据
存储对象真正的有效数据。
3)对齐填充
对象的大小必须是8的倍数,对象头正好是8的倍数,所以在实例数据没有对齐时,就有了对齐填充来补全。
二.对象的访问定位
1.访问方式
对象访问方式:句柄、直接指针
2.句柄方式访问对象
java heap将划分出一块内存作为句柄池
reference存放的是对象的句柄地址,而句柄中包含对象的实例数据与数据类型各自的具体地址信息。

3.直接指针访问
reference中存储的是对象的地址。

3.两种访问方式的优缺点
句柄访问方式由于referenece中存储的是地址,所以在java对象更改、移动、垃圾回收等时,只需要改变句柄中的引用地址即可。
直接指针方式的好处就是速度快,指针存储的就是对象地址,省了第一次指针定位查找的时间,由于对象的访问在java中非常频繁,所以随着程序的运行,省却的时间加一起还是比较可观。
HotSpot的对象访问方式主要是第二种,直接指针方式。

猜你喜欢

转载自blog.csdn.net/core___java/article/details/80045963