对象在内存中的内存布局
查看方法:
结果:
普通对象布局:
- markword(8字节);
- class pointer(类型指针)(经过压缩变成4字节,原来是64bit-8字节);
- instance data(实例数据);
- padding(对齐)。
对象头:markword和class pointer(12字节)
面试题
1.Object o = new Object()在内存中占了多少个字节?
Java本身默认开启了compass压缩,所以Object占了16个字节(头12,对齐4)。
不压缩也是16个字节(头8+8,无需对齐)。
2.如果User有一个int id; String name两个成员变量,在内存中占了多少个字节?
占24个字节:markword(8字节)+压缩后的类型指针(4字节)+int压缩(4字节)+String压缩(字节)+对齐补充(4字节)。