你真的了解java对象吗(对象内存布局)

对象头
Mark Word:占32bit或64bit(看jvm是多少位的),以32位为例,通常气孔下存储对象的hashcode、gc分代年龄、锁标志位、是否应用偏向锁。当该对象被作为同步锁时,该32位可悲复用存储其他信息:偏向锁-》偏向id偏向时间戳;轻量级锁-》指向线程的Displace Mark Word的指针;重量级锁-》仔细那个重量级锁的指针
Class Matedata Address:类型指针指向方法区中该对象所属类的元数据信息,占4个或8个字节
ArrayLength:如果是数组对象才会有这部分内存,记录了数组的长度
实例数据
应用程序实实在在要访问的数据,通常由以下变量组成
byte,char,short,int,float占四个字节(这是在jvm存储的数据结构,和语言层面有本质的不同)
long,double 占八个字节
reference 占四个或八个字节
内部类 以上类型的组合
对齐填充
这部分数据没有实质性的作用,仅用来占位。
Hotspot的内存管理系统是一8个字节位单位的,非数组对象的对象头刚好是8字节或16字节,因此当实例数据不是8字节倍数时需要用这个来填充
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值