美文网首页js css html
4种方法教你如何查看java对象所占内存大小

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

作者: King斌 | 来源:发表于2023-01-13 14:03 被阅读0次

    计算java对象所占内存大小

    1.使用jdk8自带API

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

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

    结果如下:

    image.png

    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));
    

    结果如下:

    image.png

    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());
    

    结果如下:

    image.png

    相关文章

      网友评论

        本文标题:4种方法教你如何查看java对象所占内存大小

        本文链接:https://www.haomeiwen.com/subject/rncwcdtx.html