Java对象
对象在堆中的存储布局
它保存了什么
对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例
对象头有多大?在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节。
对象头+实例数据+对齐填充的演示说明
64位Mark Word对象头
源码定义
代码演示
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.9</version>
</dependency>
查看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内存布局