栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM 之对象的内存布局(2.3.2)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM 之对象的内存布局(2.3.2)

《深入理解 Java 虚拟机》笔记 2.3.2 对象的内存布局

在 HotSpot 虚拟机中,对象在堆内存中的存储布局可以划分为三个区域:

  • 对象头(Header)
  • 实例数据(Instance Data)
  • 对齐填充(Padding)
(1)对象头

其中,对象头部分包括两类信息:

  1. 存储了对象自身运行时数据的信息:如哈希码、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等。
  2. 类型指针,即对象指向它的类型元数据的指针,Java 虚拟机通过这个指针来确定该对象是哪个类的实例。
  3. (长度确定的数组:数组的长度)
(2)实例数据

指所定义各种类型的字段内容(一个对象的各属性值)。
分配策略:

  1. 相同宽度的字段一起,宽度大的优先:longs/doubles、ints、shorts/chars、bytes/booleans、oops。
  2. 满足条件(1)的前提下,父类中定义的变量在子类前面。(HotSpot 虚拟机的 +XX: CompactFields 参数值为 true(默认值),则子类中较窄的变量也允许插入父类变量的空隙中,以节省空间。)
(3)对齐填充

HotSpot 虚拟机的自动内存管理系统要求 对象的起始地址必须是 8 字节的整数倍,即 任何对象的大小都必须是 8 字节的整数倍。
对象头部分已经被精心设计成正好是 8 字节的倍数大小了,因此,如果对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号