『』你写的Java对象究竟占多少内存?( 三 )


结果如下:
『』你写的Java对象究竟占多少内存?
文章图片

文章图片

我们可以看到TestNotNull的类占用空间是24字节 , 其中头部占用12字节 , 变量a是int类型 , 占用4字节,变量nullObject是引用 , 占用了4字节 , 最后填充了4个字节 , 总共是24个字节 , 与我们之前的预测一致 。但是 , 因为我们实例化了NullObject,这个对象一会存在于内存中 , 所以我们还需要加上这个对象的内存占用16字节 , 那总共就是24bytes+16bytes=40bytes 。我们图中最后的统计打印结果也是40字节 , 所以我们的分析正确 。
这也是如何分析一个对象真正的占用多少内存的思路 , 根据这个思路加上openJDK的jol工具就可以基本的掌握自己写的“对象”究竟败家了你多少内存 。总结
本文我主要讲述了如何分析一个Java对象究竟占用多少内存空间 , 主要总结点如下:
Java对象头部内存模型在32位虚拟机和64位虚拟机是不一样的 , 64位虚拟机又分为开启指针压缩和不开启指针压缩两种对象头模型 , 所以总共有3种对象头模型 。
内存对齐主要是因为平台的原因和性能的原因 , 本文主要解析的是性能方面的原因 。
【『』你写的Java对象究竟占多少内存?】空对象的内存占用计算注意要计算内存对齐 , 非空对象的内存计算注意加上引用内存占用和原实例对象的空间占用 。


推荐阅读