Java对象内存布局和对象头

文章目录

  • 1 定义
  • 2 详细介绍
    • 2.1 对象头
    • 2.1 实例数据
    • 2.1 对齐填充
  • 3 JOL查看内存布局

1 定义

Java对象内存布局和对象头_第1张图片

2 详细介绍

Java对象内存布局和对象头_第2张图片
在这里插入图片描述

2.1 对象头

Java对象内存布局和对象头_第3张图片
Java对象内存布局和对象头_第4张图片
【对象标记】
Mark Word
Java对象内存布局和对象头_第5张图片
Java对象内存布局和对象头_第6张图片
Java对象内存布局和对象头_第7张图片
Java对象内存布局和对象头_第8张图片
Java对象内存布局和对象头_第9张图片
【类元信息】
又名类型指针
Java对象内存布局和对象头_第10张图片

2.1 实例数据

2.1 对齐填充

3 JOL查看内存布局

public class ObjectLayout {
    public static void main(String[] args) {
        System.out.println(VM.current().details());
        System.out.println(VM.current().objectAlignment());
    }
}

# Running 64-bit HotSpot VM.
# Using compressed oop with 0-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

8
public class ObjectLayout {
    public static void main(String[] args) {
        Object o = new Object();
        System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
}

java.lang.Object object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           e5 01 00 20 (11100101 00000001 00000000 00100000) (536871397)
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

Java对象内存布局和对象头_第11张图片

你可能感兴趣的:(#,Java并发编程,java,开发语言)