Object o = new Object();
在堆内存中生成一个Object对象,此时该对象有三部分组成:对象头,对象包含的变量数据(实例数据),字节对齐。
默认情况下,对象头占12个字节 = 8个字节的markword + 4个字节的类型指针。且对象的大小必定是8字节的倍数,猜测这可能是跟64位jdk有关,在32位上可能就变成4的倍数了。
这里需要引用一张马士兵老师上课的图:
可见对象头部分是固定不变的,变动的是对象所包含的实例数据部分,所以我们只需要测试不同的实例数据对对象大小的影响即可。
这里需要使用一个小工具,由openjdk提供的一个jar包 jol-core-0.10.jar
测试代码如下:
package com.fh.test;
import org.openjdk.jol.info.ClassLayout;
public class JavaTest {
public static void main(String[] args) {
// new一个A对象
A o = new A();
// 打印出A对象的内存空间大小