Java对象

2020-01-15  本文已影响0人  修塔寻千里

本文以HotSpot虚拟机为例,介绍Java对象在虚拟机中存储和使用方式。

对象的内存布局

对象在内存中存储布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充。

对象头

实例数据

顾名思义是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类集成下来的,还是在子类中定义的,都需要记录起来。这部分的存储顺序收到虚拟机分配参数和字段在Java源码中定义循序的影响。

对齐填充

对齐填充并不是必然存在的,也没有特殊的含义,仅仅起到占位符的作用。由于HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,因此对象实例数据部分没有对齐时,就需要通过对齐填充来不全。

对象的访问定位

Java程序需要通过栈上的reference数据来操作堆上的具体对象,由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有具体的实现方案,取决于虚拟机的实现,目前主流的访问方式有使用句柄和直接指针两种。

参考资料

上一篇 下一篇

猜你喜欢

热点阅读