2017-06-17 271 views
1

我的電腦有64GB的內存,並在Eclipse中我設置的默認VM參數,像這樣:爲什麼JVM的實際內存佔用量比我的Xmx大得多?

-Xms512m -Xmx9g 

我以爲9GB的最大尺寸我的Java應用程序可以利用的。但是,在我開始我的應用程序一段時間後,我可以從系統監視器看到我的Java應用程序進程正在使用近16GB的內存。它如何比我設置爲9GB的VM參數大?

+1

@Ravi它看起來並不像一個重複的看,因爲這個問題是不是XMX是什麼,而是它爲什麼不能按預期工作。 – Harald

+0

@ user697911你指的是哪個系統監視器,你究竟看到了哪個數字? – Harald

+0

當您詢問有關'Xmx'的信息時。所以,這裏有很好的解釋。你需要分享你的任務管理器屏幕。向我們展示,因爲它需要更多的記憶 – Ravi

回答

1

-Xmx設置用於Java對象(組織成幾代「Eden」,「Survivor」,「Tenured/Old」)的JVM「堆」內存的最大大小。 堆JVM還分配:

  • 裝入的類,和即時編譯代碼(如需要)

  • 線程堆棧

  • NIO '直接' 緩衝器

  • 本機代碼:JVM本身(包括它使用的系統庫)以及由JNI或JNA加載/訪問的代碼

  • 由本機代碼

第一組管理個

  • 數據是在CodeCache和PermGen的通過Java 7和元空間在Java 8;儘管不在堆中,但是這些通過MemoryPoolMXBean像堆空間那樣報告,並且可以通過不同的選項如-XX:MaxPermSize -XX:MaxMetaspaceSize進行調整。剩下的組不能從AFAIK報告。堆棧大小可以設置爲-Xss(但對全部線程全局)。

    What is the difference between Java Non Heap Memory and Stack Memory? Are they Same if not what is the difference between them?Java: non-heap-memory analyzes

  • 相關問題