对象在内存中的存储布局?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/