JVM 对象的内存布局

  • 对象头

    • ++Mark word 标记字段++

      • 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
    • ++ClassPoint 类型指针++

      • 对象指向它的类型元数据的指针,Java虚拟机通过这个指针 来确定该对象是哪个类的实例
    • ++数组长度++

      • 如果对 象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通 Java对象的元数据信息确定Java对象的大小,但是如果数组的长度是不确定的,将无法通过元数据中的 信息推断出数组的大小。
  • 实例数据

    对象真正存储的有效信息

  • 对齐填充

    不是必然存在的,也没有特别的含义,它仅仅起着占位符的作 用。

    由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说就是 任何对象的大小都必须是8字节的整数倍。对象头部分已经被精心设计成正好是8字节的倍数(1倍或者 2倍)。因此,如果对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。

相关推荐
邪修king4 分钟前
Re:Linux 系统篇(三十一):库的制作与原理Chapter2:静态链接与程序加载 —— 从磁盘 ELF 到运行中进程的完整旅程
android·linux·运维·开发语言
geovindu5 分钟前
rust: Factory Method Pattern
开发语言·设计模式·rust·工厂方法模式·创建型模式
eybk5 分钟前
用Kivy制作手机相片分类局域网传送工具,还能传输数据库文件
开发语言·python
Java内核笔记8 分钟前
Spring Boot 4 与 Spring AI 2.0 深度集成:ChatClient、Advisor 链与 MCP(源码级实战)
java·后端
可爱的小小小狼8 分钟前
【无标题】
java·算法
用户3126874877209 分钟前
Java SPI 到底怎么实现动态扩展的?从 ServiceLoader 到 Dubbo SPI 全链路拆解
java
新时代农民工~9 分钟前
【双机高可用部署方案-前后端部署】
java·nginx·springboot
企业数字化笔记10 分钟前
固定资产还有借用记录能报废吗?Java前置检查、停止折旧与SQL验收
java·开发语言·sql
飞虹地星海11 分钟前
从零到一跑通苍穹外卖:一个大二学生的暑假项目复盘
java
她的男孩14 分钟前
账号锁定配了"错 4 次锁 30 分钟",我连错 100 次一次没锁上:扒完 4091 行认证源码,找到 5 个坑
java·后端·架构