对象的内存布局:对象头、实例数据、对齐填充
引言:对象在内存中的真实面貌 当你创建一个对象时: User user = new User("张三", 25); 这个对象在JVM堆中究竟占用多少字节?内存是如何布局的? 答案可能出乎意料:即使 User 类只有两个字段(name和age),这个对象也可能占用 32字节甚至更多。 为什么? 对象不仅包含实例数据(字段值) 还包含 对象头(存储对象元信息) 还可能有 对齐填充(保证内存对齐) 理解对象的内存布局是掌握JVM内存优化、锁机制、GC原理的基础。 对象的内存布局结构 三大组成部分 在HotSpot虚拟机中,对象在内存中分为3个部分: ┌─────────────────────────────────────────────────┐ │ 对象内存布局 │ ├─────────────────────────────────────────────────┤ │ 1. 对象头 (Object Header) │ │ ├─ Mark Word(8字节,64位JVM) │ │ └─ 类型指针(4字节,开启指针压缩) │ │ │ │ 2. 实例数据 (Instance Data) │ │ · 字段1: String name │ │ · 字段2: int age │ │ │ │ 3. 对齐填充 (Padding) │ │ · 确保对象大小是8字节的倍数 │ └─────────────────────────────────────────────────┘ 对象头(Object Header) 对象头的组成 对象头包含两部分: ...