Object o=new Object()在内存中占用多少字节

  如果jvm默认开启了UseCompressedClassPointers类型指针压缩,那么首先new Object()占用16个字节(markword占8+classpointer占4+instancedata占0+补齐4),然后Object o有一个引用,这个引用默认开启了压缩,所以是4个字节(每个引用占用4个字节),所以一共占用20个字节(byte)

  如果jvm没开启CompressedClassPointers类型指针压缩,那么首先new Object()占用8(markword)+8(class pointer)+0(instance data)+0(补齐为8的倍数)16个字节,然后加引用(因为jvm默认开启UseCompressedClassPointers类型指针压缩,所以默认引用是占4字节,但这里没启用压缩,所以为8字节)占的8个字节=24个字节

附加:
普通对象在内存中的存储布局:
1.普通对象(new xx())组成

  • markword
  • 类型指针class pointer
  • 实例数据instance data
  • 对齐padding

  markword(8字节):关于锁的信息,关于synchronized所有信息都存储在markword中

  类型指针(jvm默认开启压缩,为4字节):指向具体哪个类,64位系统中,默认一个类型指针占64位,8字节,但是jvm默认UseCompressedClassPointers,将其压缩为4字节,markword+类型指针class pointer=对象头(12字节)

  实例数据:像int就是4字节,long就是8字节

  对齐:因为jvm按8的倍数读,所以要对齐,不够的补,这样读就特别快,提升效率

2.数组对象组成
  对象头markword,类型指针class pointer,数组长度length(4字节),实例数据instance data,对齐padding
  与普通对象相比,数组对象就是多了一个4字节的数组长度length,其余部分与数组对象保持一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值