java内存计算工具类(3种)

本文介绍了Java中用于计算对象内存占用的三种工具类,包括JDK自带的ObjectSizeCalculator,JOL(JavaObjectLayout)和Lucene的RamUsageEstimator,以及它们在实际开发中的应用和Maven依赖配置。
摘要由CSDN通过智能技术生成
节前回顾

java最小单位 字节bit  
关系  1byte = 8bit  1024bit = 1K   1024K = 1M 1024M = 1G 1024G = 1T

在一些开发场景,我们需要计算对象的大小时,可以使用以下的工具类。

三种计算内存的小工具类

  • JDK自带内存计算工具类
  • JOL,JOL的内容相对更丰富,可以看到实体里的更多细节
  • LUCENE

以下是代码实现,需要引入Maven依赖

        <!--jol内存计算工具 -->
        <dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.16</version>
        </dependency>

        <!-- lucene -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>4.0.0</version>
        </dependency>
        
    /**
     * JDK自带内存计算工具
     * */
    public static long getTotalMemory(Object obj) {
        System.setProperty("java.vm.name","Java HotSpot(TM) ");
        long totalMemory = ObjectSizeCalculator.getObjectSize(obj);
        System.out.println("getTotalMemory getObject memory : " + totalMemory);
        return totalMemory;
    }

    /**
     * jol内存计算
     * */
    public static long jolGetTotalMemory(Object obj) {
        String printLog = ClassLayout.parseInstance(obj).toPrintable();
        System.out.println(printLog);
        long totalMemory = ClassLayout.parseInstance(obj).getLossesTotal();
        System.out.println("jolGetTotalMemory getObject memory : " + totalMemory);
        return totalMemory;
    }

    /**
     * lucene内存计算
     * */
    public static long luceneGetTotalMemory(Object obj) {
        //统计字节
        long  totalMemory = RamUsageEstimator.sizeOf(obj);
        System.out.println("luceneGetTotalMemory getObject memory : " + totalMemory);
        //带最大单位统计
//        System.out.println(RamUsageEstimator.humanSizeOf(map));
//        System.out.println(RamUsageEstimator.humanSizeOf(1));
        return totalMemory;
    }

测试方法

    public static void main(String[] args) {
//        Object o = new Object();
        List<Long> o = new ArrayList<>();
        o.add(1234L);
        getTotalMemory(o);
        jolGetTotalMemory(o);
        luceneGetTotalMemory(o);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值