美文网首页
对象的内存布局和访问定位

对象的内存布局和访问定位

作者: engineer_tang | 来源:发表于2021-11-04 08:18 被阅读0次

1. 对象的内存布局

image.png

1.1 对象头

对象头包含两类数据,第一类是用于存储对象自身的运行时数据;第二类是类型指针,用于指向它的类型元数据,用来确定该对象实例所指向的类。

1.2 实例数据

真正存储的有效信息。

1.3 对齐填充

没有特殊意义,也不是必然存在的,起占位符的作用。HotSpot虚拟机的内存管理系统要求对象的起始地址必须是8字节的整数倍,即任何对象的大小必须是8字节的整数倍,对没对齐的部分,通过对齐方式进行补全。

2. 对象的访问定位

通过栈上的reference数据来操作堆上的具体对象。对象的访问方式主要为两种,分为使用句柄和直接指针。

  • 使用句柄访问,JAVA堆划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含实例数据和类型数据各自的地址信息。

  • 使用直接指针访问,reference中存储的是对象地址,要访问类型数据需要通过 实例找到类型数据的引用地址。

HotSot主要使用第二种即直接指针访问的方式进行对象操作。

相关文章

网友评论

      本文标题:对象的内存布局和访问定位

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