【Java面试】听说Java求职者/面试官都关注了我,这道面试题一个空Object对象的占多大空间?你答的上来吗
“一个空Object对象的占多大空间?”
一个工作了5年的Java程序员直接被搞蒙了。
大家好,我是Mic,一个工作了14年的Java程序员。
我把这个问题的文字版本整理到了15W字的面试文档里,大家可以扫描文章尾端领取。
下面看看高手的回答。
高手:#
在开启了压缩指针的情况下,Object默认会占用12个字节,但是为了避免伪共享问题,JVM会按照8个字节的倍数进行填充,所以会填充4个字节变成16个字节长度。
在关闭压缩指针的情况下,Object默认会占用16个字节,16个字节正好是8的整数倍,因此不需要填充。
在HotSpot 虚拟机里面,一个对象在堆内存里面的内存布局是使用OOP结构来表示的,
它主要分为三个部分。
-
对象头,包括Markword、类元指针、数组长度其中Markword用来存储对象运行时的相关数据,比如hashCode、gc分代年龄等。
在64位操作系统中占8个字节,32位操作系统中占4个字节类元指针指向当前实例对象所属哪个类,开启指针压缩的情况下占4个字节,未开启则占8个字节数组长度只有对象数组才会存在,占4个字节
-
实例数据,存储对象中的字段信息
-
对齐填充,Java对象的大小需要按照8个字节或者8个字节的倍数对齐,避免伪共享问题。
因此,一个空的对象,在开启压缩指针的情况下,占16个字节
其中Markword占8个字节、类元指针占4个字节, 对齐填充占4个字节。
总结#
这个问题不仅仅考察JVM基础还考察求职者对于JVM对于对象内存布局的理解程度。
对于内存布局这块的理解主要还是帮助我们更好的解决JVM应用上的实际问题
喜欢的朋友记得点赞收藏加关注!!!
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Mic带你学架构
!
如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端