4种方法教你怎样检察java对象所占内存巨细

手机游戏开发者 2024-9-8 20:05:48 61 0 来自 中国
盘算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());效果如下:
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 18:27, Processed in 0.131888 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表