JUC之Java对象内存布局

慈云数据 2024-03-20 技术支持 64 0

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内存布局

在这里插入图片描述

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon