【无标题】jvm之对象在内存中的布局

对象在内存中的布局

对象在内存中分为四部分:markword,类型指针klasspointer,实例数据(instance_data),对齐填充(padding)。

  • markword,64位虚拟机中为8字节,32位长度为4字节
    markword中包含锁信息,hashcode值GC年龄

    • 锁信息
      初始化时,该内容为空,上锁后赋值,锁等级越高,数据量越大

    • hashcode
      在对象第一次hash操作时存储进去,后续获取的hashcode值不会变化

    • GC年龄
      关系到垃圾回收,由伊甸区,到生存区1,到生存区2,到永久区。年龄随着存货次数增大,直至到一定年龄,转到永久区

  • 类型指针
    指向生成该对象的类在方法区的地址,开启指针压缩为4字节,不开启为8字节
    -实例数据
    该对象内对象的大小。例如boolean占1字节,byte1字节,int4字节,String 4字节(指针压缩,不压缩为8字节)。值得注意的是,基础数据类型是按该类型的长度来计算,引用类型存储的是地址,大小一致。

  • 对齐填充(padding)
    由于java对象时8字节对齐的,内存分配时需要保证对象的大小是8的整数倍,所以需要最后的部分补足长度。例如如果一个对象实际大小为17字节,那么就需要补足到20字节,填充的大小就为3字节。如果一个对象长度为16字节,那么在能正好整除8的情况下,就不需要补足,这时填充的大小为0字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值