Java 获取内存使用情况

公司要求将各个设备上传的数据分析并且导出到统一的一个表中,目前在准备,数据比较多,所以需要考虑到内存的使用情况,经网上查询使用,出现了以下问题。

第一种方法Runtime

    LogUtils.debug("TotalMemory", Runtime.getRuntime().totalMemory()/(1024*1024)+"M");
    LogUtils.debug("FreeMemory", Runtime.getRuntime().freeMemory()/(1024*1024)+"M");
    LogUtils.debug("MaxMemory", Runtime.getRuntime().maxMemory()/(1024*1024)+"M");
    LogUtils.debug("UsedMemory", (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024)+"M");

当然,获取数据是获取到了,但是发现TotalMemory与FreeMemory会变化,感觉这个有问题,所以继续查询,搜到了以下一种方式。

第二种方式

    MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();

    MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage(); //椎内存使用情况

    long totalMemorySize = memoryUsage.getInit(); //初始的总内存

    long maxMemorySize = memoryUsage.getMax(); //最大可用内存

    long usedMemorySize = memoryUsage.getUsed(); //已使用的内存

    LogUtils.debug("TotalMemory", totalMemorySize/(1024*1024)+"M");
    LogUtils.debug("FreeMemory", (totalMemorySize-usedMemorySize)/(1024*1024)+"M");
    LogUtils.debug("MaxMemory", maxMemorySize/(1024*1024)+"M");
    LogUtils.debug("UsedMemory", usedMemorySize/(1024*1024)+"M");

第二种方法获取到的总内存不会变化,是我想要的。
那么,问题来了,为什么第一中获取总内存会变化呢?我猜可能与运行时情况有关,但被什么用了,就不清楚了,希望得到大神的解答

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值