对象的内存布局

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

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

对象头区域:

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

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

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

实例数据区域:

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

对齐填充区域:

  • 占位符。
  • 非必须。

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

相关推荐
栗子叶1 天前
JVM 内存溢出和死锁检测
jvm·调优·死锁
MXM_7771 天前
laravel 并发控制写法-涉及资金
java·数据库·oracle
prettyxian1 天前
【QT】信号与槽基础:手动连接的原理与实践
开发语言·qt
傻乐u兔1 天前
C语言初阶————结构体
c语言·开发语言
weixin_445054721 天前
力扣热题52
开发语言·python
逑之1 天前
C语言笔记2:C语言数据类型和变量
c语言·开发语言·笔记
这就是佬们吗1 天前
告别 Node.js 版本冲突:NVM 安装与使用全攻略
java·linux·前端·windows·node.js·mac·web
何中应1 天前
@Autowrited和@Resource注解的区别及使用场景
java·开发语言·spring boot·后端·spring
源代码•宸1 天前
Golang语法进阶(Context)
开发语言·后端·算法·golang·context·withvalue·withcancel
一条咸鱼_SaltyFish1 天前
[Day16] Bug 排查记录:若依框架二次开发中的经验与教训 contract-security-ruoyi
java·开发语言·经验分享·微服务·架构·bug·开源软件