今日面试题 : Java 里的对象在虚拟机里面是怎么存储的?
大家好,我是鸭鸭。
刷题就上面试鸭,帮助大家更高效通过面试(支持网页端、小程序):https://mianshiya.com/ 。
祝大家都能拿到心仪的 Offer!
回答重点
Java 对象在虚拟机中的存储由以下几个部分组成:
对象头(Header):包含对象的元信息和运行时数据。主要由以下三部分构成:
- Mark Word:用于存储运行时数据,例如对象的哈希码(HashCode)、GC 标记信息、锁状态标志等。它是一个多功能字段,会根据对象的状态动态变化。
- 类型指针(Class Pointer):指向对象对应的类的元数据,用于确定该对象的类型。
- 数组长度(只有数组才有)
实例数据(Instance Data):存储对象的实际数据,即类的字段(包括从父类继承的字段)。
对齐填充(Padding):为了满足内存对齐要求(一般是 8 字节对齐),JVM 可能会在对象末尾添加填充字节。例如,一个对象大小为 12 字节,JVM 会增加 4 字节填充,使其达到 16 字节对齐。
存储位置
堆(Heap):大多数对象分配在堆中,堆是 JVM 管理的内存中最大的一块区域。堆内部分为以下区域:
- 新生代(Young Generation):刚创建的对象通常存放在 Eden 区,经过一次或多次 GC 后可能晋升到 Survivor 区或老年代。
- 老年代(Old Generation):存放生命周期较长的对象,经过多次 GC 后未被回收的对象会晋升到老年代。
扩展知识
64 位 MarkWord 在不同状态下的内存布局
MarkWord 结构之所以搞得这么复杂,是因为需要节省内存,让同一个内存区域在不同阶段有不同的用处。

评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
我想问一下大家简历的字体是多少号的呢,是2页还是3页
2
今天面了两家公司,面试时间都比较短直接总结到一起了第一家1. 自我介绍2. 公司两个项目开发中,用到 Codex 或 Claude Code 了吗?3. 具体是用来写什么?用的是最多的哪个?4. Claude Code 用的是什么模型?5. 什么时候开始用的?(精确到具体月份)6. 是官方账号还是中转站?7. 当时开发一天用多少钱?8. 平时用到什么 Skill 或 MCP 吗?9. Claude
5
找实习从7月22号开始投,现在也总算是有offer了
5
怎么会有笨蛋从一月到现在,背了7个月的面试题,还啥都不会呢,到底背哪里去了,该怎么办
3
【入职求助贴】萌新刚入职某大厂做后端开发,目前还在试用期。最近遇到一个棘手的问题,想向大家求助一下。入职不久,leader 给我派了一个任务。跟我说是0.5天就可以解决,我刚毕业入职,做了一个星期没有做出来。实现一个收集定时成功任务的案例。听起来好像不复杂,但我自己摸索着做了一整个星期,到现在还没达到预期效果。这一周我基本是“边学边做”的状态,遇到卡点也会每天主动找 leader 沟通进度和疑问。
2
