JVM中对象的内存布局

JVM对象内存布局解析
本文介绍了JVM中对象的内存布局,包括对象头、实例数据和对齐填充三部分。详细解释了MarkWord和类型指针的作用,以及HotSpot VM如何确保对象地址符合特定的对齐要求。

JVM中对象的内存布局

简单介绍对象的内存布局


对象的内存分布

这里写图片描述


说明:

1. 对象头

  1. Mark Word 非固定结构,32位虚拟机占32位,64位虚拟机占64位(占64位条件是没有开启压缩指针
  2. 类型指针,并非一定要有,与对象访问方法有关
  3. 如果是数组,无法通过元数据信息确定java对象大小,这个时候就需要记录长度。

2. 实例数据: 真正有效的数据

存储顺序受下面两种情况影响

  1. 分配策略参数(FieldsAllocationStyle)
  2. 字段在在Java中定义的顺序

HotSpot默认分配策略

longs/doublesintsshorts/charsbytes/booleanoops(ordinary object pointers)

相同宽度的字段总是被分配到一起

  • 在满足这个条件下,父类中定义的变量会出现在子类之前。

  • 如果CompactFields参数为ture(默认为true),那么子类之中较窄的变量也会插入到父类变量的空隙之中


3.对齐填充:占位符的作用

HotSpotVM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,也就是要求对象的大小必须是8个字节的倍数


参考:

1.《深入理解java虚拟机》–周志明
2. Java对象创建的过程及对象的内存布局与访问定位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值