4種方法教你如何查看java對象所佔內存大小

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

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章