写点什么

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

  • 2022 年 6 月 27 日
  • 本文字数:830 字

    阅读完需:约 3 分钟

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

本文分享自华为云社区《查看java对象所占内存大小》,作者:xiewenci。

计算 java 对象所占内存大小

1.使用 jdk8 自带 API


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



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


结果如下:


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));
复制代码


结果如下:


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 对象内存分布


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


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
4种方法教你如何查看java对象所占内存大小_Java_华为云开发者联盟_InfoQ写作社区