查看java对象所占内存大小
【摘要】 计算java对象所占内存大小 1.使用jdk8自带API使用这种jdk8方式时,Open JDK 不是天然支持的,需要set一下环境变量System.setProperty("java.vm.name","Java HotSpot(TM) ");System.out.println(ObjectSizeCalculator.getObjectSize(3L));结果如下: 2. 借助org...
计算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对象的布局,可以参考这篇博客
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)