对象的内存布局

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

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

对象头区域:

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

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

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

实例数据区域:

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

对齐填充区域:

  • 占位符。
  • 非必须。

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

相关推荐
lxl13071 分钟前
C++算法(1)双指针
开发语言·c++
TT哇3 分钟前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
逝水如流年轻往返染尘6 分钟前
Java中的数组
java
不绝19112 分钟前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
无小道18 分钟前
Qt-qrc机制简单介绍
开发语言·qt
java1234_小锋23 分钟前
Java高频面试题:BIO、NIO、AIO有什么区别?
java·面试·nio
zhooyu24 分钟前
C++和OpenGL手搓3D游戏编程(20160207进展和效果)
开发语言·c++·游戏·3d·opengl
HAPPY酷28 分钟前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python
大鹏说大话28 分钟前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
Lee川35 分钟前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试