2014-10-31 28 views
4

在HTOP中,您可以看到RES值(常驻大小),它显示了您的JVM进程真正采用了多少内存。通过Java获得当前JVM的真实RAM使用情况

现在我只想使用纯Java通过获得该值。如果你告诉我这是不可能的,那也没关系。

让我解释一下我所用,显示887M的HTOP一个RES值的申请而作出的尝试:

  1. 通过MemoryMXBean结合致力于HeapMemory和非Heapmemory给了我7.26亿
  2. 添加了所有COMMITED内存所有ManagementFactory.getMemoryPoolMXBeans的()给了我737M
  3. runtime.totalMemory()提供515M

任何想法还有什么我可以尝试?

+0

有没有纯Java功能会给你这个。您可以通过一些假设估计它会是什么,但是您缺少内存映射文件,线程堆栈,共享库和直接内存,这些内容不包括在您提到的会计中。在我编写的程序中,如果你正确地使用它们,内存映射文件可以超过一切。 – 2014-10-31 14:28:03

+1

所以我基本上被迫使用顶级外部工具或使用JNI魔法? – Traubenfuchs 2014-10-31 14:32:53

+0

正确,但通常情况下,您将有一个外部程序监视您的使用情况,您希望根据此数字在应用程序中执行什么操作?注意:拥有低数字可能是一件坏事,高数字可能是件好事。 – 2014-10-31 14:34:41

回答

3

假设您正在运行Linux,请阅读/proc/self/status文件并查找VmRSS:行。

或解析/proc/self/smaps为当前进程获取全面的内存信息。

+0

我不认为这是纯Java(它取决于系统功能和Windows下的中断),虽然这是一个有用的答案。 – Pokechu22 2014-10-31 18:31:26

+0

作为一种解决方法,它的效果已经足够好了。 – Traubenfuchs 2014-11-03 10:39:08

+0

这可能是最干净,最标准的方法。要填写Windows支持,您可以考虑使用WMI COM接口([在此讨论](http://stackoverflow.com/questions/4610063/recommended-libraries-howtos-for-using-wmi-with-java)) 。 – ssube 2014-11-04 14:58:43

相关问题