对象在内存中的存储布局?Object o = new Object()在内存中占用多少字符?

对象的内存布局可以分为两种对象:普通对象和数组对象。

一、普通对象:

  1. 对象头(Mark Word):8Byte

  2. 类指针(Class Pointer): -XX:+UseCompressedClassPointers开始的话是4Byte,不开启是8Byte

  3. 实例数据(成员变量): 

  引用类型:-XX:+UseCOmparessedOops 开始的话4个字节,不开启则为8个字节

​   基本数据类型:

    

    4.Padding对齐,8的倍数。假如这个对象前面几项占用的字节为15则会补1个字节,则这个对象占用16字节

二、数组对象,比普通对象多一个数组长度(4个Byte)

  1.markword 8个字节

​  2.ClassPointer指针 4/8个字节

​   3.数组长度:4个字节

​   3.数组数据:数组元素数据占用大小A(按普通对象或者数组来计算) * 数组长度

​   4.Padding对齐,8的倍数。

 三、代码实验验证

参考:

https://blog.csdn.net/LiushaoMr/article/details/104345322
https://www.codenong.com/cs105956501/

原文地址:https://www.cnblogs.com/iamswf/p/14579458.html