对象内存分布

  对象在内存中分为三个区域:1 对象头(Header) 2 实例数据(Instance Date) 3 对齐填充(Padding)

  1 对象头:

     1) 存储自身运行时的数据,如Hascode ,GC 分代年龄,锁状态标记,线程持有锁,偏向线程id,偏向时间戳。数据存放在32bit 和64bit 机中分别用32bit和64bit来存储。

     2)  对象头的另一部分是类型指针。是对象指向他的类元数据的指针。虚拟机通过这个指针来确认这个对象是哪个类的实例。注:不是所有的对象都有这个记录,

2 实例数据:

   对象真正存储的有效的信息,程序代码中定义的各种的数据的类型,如果有继承的关系,还有继承父类的字段。分配策略(参数FiedsAllocationStyle)影响java中定义的顺序,对相同宽度的字段总是被分配到一起,在这种情况下,父类定义的变量会出现在子类之前。CompactFields 为true (默认为true) 子类中较窄的变量也可能插入到父类变量中。

 

3 对齐填充

   仅仅起到了占位符的作用,由于hotSopt vm 的自动的内存管理系统要求对象的起始地址必须是8字节的整倍数,所以当实例数据没有对齐时,要通过对齐填充来补充

 

转载于:https://www.cnblogs.com/jie123/p/6792397.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值