对象的内存布局

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

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

对象头区域:

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

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

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

实例数据区域:

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

对齐填充区域:

  • 占位符。
  • 非必须。

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

相关推荐
864记忆4 分钟前
Linux操作系统自带的测试内存泄漏的命令
java·linux·运维
Jul1en_17 分钟前
【算法】分治-归并类题目
java·算法·leetcode·排序算法
tryxr19 分钟前
volatile 的作用
java·jvm·volatile·指令重排序
再__努力1点19 分钟前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
Evand J27 分钟前
【2026课题推荐】基于小波/互相关/FFT的卡尔曼滤波的轨迹估计,及MATLAB例程的运行结果
开发语言·matlab·目标跟踪·轨迹跟踪
独自归家的兔33 分钟前
Java Robot 详解:系统级鼠标 / 键盘模拟的核心原理与实战
java·开发语言
小灰灰搞电子39 分钟前
Qt 开发环境选择Qt Creator、Visual Studio还是 VS Code?
开发语言·qt·visual studio
岳轩子39 分钟前
DDD领域驱动设计:核心概念、实践结构与框架对比
java·spring
何中应40 分钟前
Bean的三种注入方式
开发语言·spring boot·后端·spring
ArabySide1 小时前
【Java】重构之善用多态解耦,记录一次模板方法实践
java·重构·模板方法模式