问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

一个Java对象究竟占多少内存空间?

提问网友 发布时间:2025-03-14 14:44
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2025-04-01 09:08
Java 作为面向对象的编程语言,为我们提供了丰富的特性,使得代码更加易于维护和扩展。然而,一个常见的疑问是:我们创建的 Java 对象究竟占用多少内存空间呢?本文将通过分析 Java 对象的内存模型,揭开这一谜团。

本文环境设定为 JDK 1.8 和 64 位虚拟机。在探讨 Java 对象的内存模型之前,我们先了解一个基本概念:每个 Java 对象都包含两部分:Mark Word 和 Klass Word。Mark Word 是锁实现原理中的关键部分,而 Klass Word 则包含元数据和方法信息,用来描述 Java 类。

在 64 位虚拟机的环境下,开启指针压缩后,Klass Word 占用 32 位空间,而 Mark Word 占用 64 位空间。因此,一个 Java 对象的内存占用至少为 96 位,即 12 字节。这是对象头的固定占用空间,无论对象内部是否包含属性。

接下来,我们使用代码验证上述内存模型。利用 openjdk 的 JOL 工具,我们可以查看对象的内存占用情况。通过新建一个普通的类,我们发现一个空对象占用 16 字节的内存。这是因为对象头和虚拟机填充的额外字节共同导致了这一结果。

在实际应用中,我们更关心的是非空对象的内存占用情况。这里,我们将创建一个包含其他对象的类来分析。通过代码执行,我们发现 TestNotNull 类占用 24 字节的内存,其中包括 12 字节的对象头、4 字节的 int 类型变量、4 字节的引用变量,以及为了内存对齐填充的 4 字节。因此,非空对象的实际占用内存为 24 字节。

最后,我们需要计算非空对象中实际对象的内存占用。以 NullObject 为例,它的内存占用为 16 字节。因此,整个对象的总内存占用为 24 字节(非空对象)+ 16 字节(NullObject)= 40 字节。

通过本文的分析,我们可以了解到 Java 对象内存占用的基本原理,以及如何使用 JOL 工具进行验证。掌握这些知识有助于我们更加高效地使用 Java,避免不必要的内存浪费。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

java电脑配置java对电脑的配置要求是 java初学,jdk用32位和64位有什么区别? 一个开发java的人需要多大内存 抖音直播数据怎么查看 查看数据统计的方法 一分钟了解|拳击、散打、搏击、格斗的区别? 自由搏击,散打,拳击有何区别 运动鞋比皮鞋大一码还是小一码? 没有开瓶器的情况下怎么开启红酒? 皮鞋码数和运动鞋一样吗 华为手机如何解除声音辅助器 皮鞋所标的尺码和运动鞋的尺码是同样的吗 OPPO怎么把语音助手的声音清除 网吧电脑屏幕自动黑屏怎么取消电脑怎么取消自动黑屏 苹果充电音怎么关 iphone手机关闭充电声音教程 海鱼干蒸多久才能熟 苹果充电动画怎么关闭啊 一个月的孩子嗓子呼噜怎么回事 问一下有没有知道新生儿睡觉嗓子呼噜响是怎么回? 新生儿吃奶时嗓子呼噜声怎么回事 华为ip认证培训班多少钱 京东微贷是什么 初五接财神了该用什么样的祝福语呢 有没有40句关于正月初五迎财神的美好祝福语? 初五这一天适合用来接财神的祝福语有啥 初五日接财神,有哪些充满喜气的祝福语? 初五送给大家的财神爷经典祝福语有哪些? 合肥自驾游去哪里好玩三天 想找些正月初五接财神用的精彩祝福语呢 财神驾到祝福语 正月初五财神日,有哪些简洁又吉利的祝福语? 正月初五接财神,都有什么合适的祝福语呀 求个能用的百度云破解限速的,无限免费试用的,求 吾爱定制版百度云管家网盘 v5.5.2百度云无限加速破解版哪个才是_百度知... 羊毛衫能熨烫吗? 羊毛衫可不可以进行熨烫操作呢? 可以对羊毛衫进行熨烫这个操作吗? 羊毛衫能不能够拿去熨烫呢? 梦见亡人在柴窝里蹲着 排骨菜的做法大全中有哪些适合新手的烹饪方法? 籍贯写到二级是写到市还是县啊?
Top