「阿里巴巴」程序员最爱new对象,可是,你真的知道一个对象占用多少内存吗?( 三 )
public static void main(String[
args) {
//打印实例的内存布局
System.out.println(ClassLayout.parseInstance(new TestNotNull()).toPrintable());
//打印对象的所有相关内存占用
System.out.println(GraphLayout.parseInstance(new TestNotNull()).toPrintable());
//打印对象的所有内存结果并统计
System.out.println(GraphLayout.parseInstance(new TestNotNull()).toFootprint());
结果如下:
我们可以看到TestNotNull的类占用空间是24字节 , 其中头部占用12字节 , 变量a是int类型 , 占用4字节变量nullObject是引用 , 占用了4字节 , 最后填充了4个字节 , 总共是24个字节 , 与我们之前的预测一致 。 但是 , 因为我们实例化了NullObject这个对象一会存在于内存中 , 所以我们还需要加上这个对象的内存占用16字节 , 那总共就是24bytes+16bytes=40bytes 。 我们图中最后的统计打印结果也是40字节 , 所以我们的分析正确 。
这也是如何分析一个对象真正的占用多少内存的思路 , 根据这个思路加上openJDK的jol工具就可以基本的掌握自己写的\"对象\"究竟败家了你多少内存 。
总结本文我主要讲述了如何分析一个Java对象究竟占用多少内存空间 , 主要总结点如下:
1. Java对象头部内存模型在32位虚拟机和64位虚拟机是不一样的 , 64位虚拟机又分为开启指针压缩和不开启指针压缩两种对象头模型 , 所以总共有3种对象头模型 。
2. 内存对齐主要是因为平台的原因和性能的原因 , 本文主要解析的是性能方面的原因 。
3. 空对象的内存占用计算注意要计算内存对齐 , 非空对象的内存计算注意加上引用内存占用和原实例对象的空间占用 。
- 三月数码帮■这几款手机可以留意一下,网友的最爱,想要“无差评”“性价比”
- 『产业气象站』阿里巴巴类似字节跳动,京东类似媒体
- 「中国发展网」阿里巴巴帮助湖北农产品把时间抢回来,盒马采购湖北10亿元小龙虾运往全国
- 「财报网」罗曼电动牙刷×阿里巴巴设计团队联手打造小心机电动牙刷,新品首发
- 『中国周刊』实力彰显!同益空气能热水系统服务阿里巴巴客服中心
- 【美股研究社】韵达股份直线涨停,传阿里巴巴计划收购韵达至少10%股份
- 【爱摄影的程序员】手持风扇也玩游戏风,有颜还静音
- 摇钱树壹号▲还拒绝华为,孙正义意欲何为,日本首富不仅套现阿里巴巴股份
- 「聚焦资讯」 外貌协会最爱的居家美物“一窝端”,“窝者”频道首秀京东家装节
- [科技E观察]搭建学术研究与工业落地的桥梁,阿里巴巴开源大型3D家具数据集