版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25034451/article/details/79483591
公司要求将各个设备上传的数据分析并且导出到统一的一个表中,目前在准备,数据比较多,所以需要考虑到内存的使用情况,经网上查询使用,出现了以下问题。
第一种方法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");
第二种方法获取到的总内存不会变化,是我想要的。
那么,问题来了,为什么第一中获取总内存会变化呢?我猜可能与运行时情况有关,但被什么用了,就不清楚了,希望得到大神的解答