摘要:本文講述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對象的佈局。