对象的内存布局

在Java虚拟机(HotSpot)中,对象在 Java 内存中的 存储布局 可分为三块:

  1. 对象头 存储区域
  2. 实例数据 存储区域
  3. 对齐填充 存储区域

对象头区域:

存储对象自身的运行时数据,如:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳。

存储对象类型指针,即对象指向类元数据的指针,JVM可以确定这个对象属于哪个类的实例。

如果是数组,对象头中还有一块记录数组长度的数据。

实例数据区域:

  • 代码中定义的字段内容。

对齐填充区域:

  • 占位符。
  • 非必须。

说明:占位符起占位作用,因为对象的大小必须是8字节的整数倍,而因HotSpot VM的要求对象起始地址必须是8字节的整数倍,且对象头部分正好是8字节的倍数。因此,当对象实例数据部分没有对齐时(即对象的大小不是8字节的整数倍),就需要通过对齐填充来补全。

相关推荐
boonya1 小时前
Elasticsearch核心原理与面试总结
大数据·elasticsearch·面试
坐吃山猪1 小时前
SpringBoot01-配置文件
java·开发语言
晚风(●•σ )1 小时前
C++语言程序设计——06 字符串
开发语言·c++
我叫汪枫2 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
Nicole-----2 小时前
Python - Union联合类型注解
开发语言·python
晚云与城2 小时前
今日分享:C++ -- list 容器
开发语言·c++
yaoxtao2 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
兰雪簪轩2 小时前
分布式通信平台测试报告
开发语言·网络·c++·网络协议·测试报告
FPGAI3 小时前
Qt编程之信号与槽
开发语言·qt
Swift社区3 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言