1. 我们首先引用一个jar包,JOL全称为Java Object Layout,是分析JVM中对象布局的工具。
<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency>
2. 编写一个啥也没有的类
import org.openjdk.jol.info.ClassLayout; public class Object { public static void main(String[] args) { Object a = new Object(); // 将分析结果打印出来 System.out.println(ClassLayout.parseInstance(a).toPrintable()); } }
打印结果如下:
3. 分析:
(1)我们看到一共16bytes。但是只用了12bytes。为啥是16bytes? 因为JVM管理对象是以8为基数的。补4个字节,对象对齐。
(2)前12个字节都是对象头。普通对象由4部分组成,markword,classPointer(类指针),成员变量,内存补齐( 保证java对象在虚拟机中占内存大小为8N bytes )。数组还有长度。