4种方法教你如何查看java对象所占内存大小 4种方法教你如何查看java对象所占内存大小

计算java对象所占内存大小1.使用jdk8自带API

使用这种jdk8方式时,Open JDK 不是天然支持的,需要set一下环境变量

System.setProperty("java.vm.name","Java HotSpot(TM) "); System.out.println(ObjectSizeCalculator.getObjectSize(3L));

结果如下:

4种方法教你如何查看java对象所占内存大小 4种方法教你如何查看java对象所占内存大小(1)

2. 借助org.apache.lucene工具类

当一个对象有多个属性,需要计算整个对象的大小时,可以借助org.apache.lucene工具类

先引入maven坐标

<dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency>

测试代码:

Map<String, String> map = new HashMap<>(); System.out.println("map init value is " RamUsageEstimator.sizeOf(map)); for (int i = 0; i < 100; i ) { RandomStringUtils.randomAlphanumeric(100); map.put(RandomStringUtils.randomAlphanumeric(10), RandomStringUtils.randomAlphanumeric(10)); } System.out.println("map size 100, value is " RamUsageEstimator.sizeOf(map)); System.out.println("map size 100, value is " RamUsageEstimator.humanSizeOf(map));

结果如下:

4种方法教你如何查看java对象所占内存大小 4种方法教你如何查看java对象所占内存大小(2)

3. 借助jol工具类

如果需要查看某个对象的详细内存分布,可以借助jol工具类,不过这种当对象中内嵌其他对象时,只能计算ClassLayout方法中这个object对象所占内存的大小

先导入maven坐标

<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency>

测试代码:

System.out.println(ClassLayout.parseInstance(23L).toPrintable());

结果如下:

4种方法教你如何查看java对象所占内存大小 4种方法教你如何查看java对象所占内存大小(3)

4. java对象内存分布

最后,计算一个对象占用多大内存,需要提前了解java对象的布局。

原文链接:https://www.cnblogs.com/huaweiyun/p/16416147.html

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页