Java对象
对象在堆中的存储布局
它保存了什么
对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例
对象头有多大?在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节。
对象头+实例数据+对齐填充的演示说明
64位Mark Word对象头
源码定义
代码演示
org.OpenJDK.jol jol-core 0.9
查看VM信息
public class JOLDemo { public static void main(string[] args) { //Thread.currentThread() System.out.println(VM.current().details()); } }
查看对象头的信息
public static void main(String[] args) { Object o = new Object(); System.out.println(ClassLayout.parseInstance(o).toPrintable()); }
说明
加入属性后
public class JOLDemo { public static void main(String[] args) { Object o = new Object(); // System.out.println(ClassLayout.parseInstance(o).toPrintable()); Customer customer = new Customer(); System.out.println(ClassLayout.parseInstance(customer).toPrintable()); } } class Customer{ long id; int age; }
对象分代年龄 4个1为15
类型指针为4个字节?? 开启了压缩参数
JVM内存布局