2014-10-31 26 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

相關問題