2016-06-14 107 views
0

我的程序使用-Xms10240m -Xmx10240m運行。我用top來檢查內存,大小是3.5g,比xms valuse小。 use topjava堆內存大於TOP

但是,當我使用jmap -heap時,我可以看到堆大小約爲10g。 use jmap

是什麼原因?

謝謝。

+0

可能由http://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used複製 – waltersu

回答

0
  1. -Xms選項用於JVM最小堆大小定義
  2. 頂部示出了真實的存儲器(VIRT/RES/SHR)過程中使用

使用例如-Xms10g -Xmx10g,當JVM開始,它會詢問操作系統分配的10g內存將用於堆。 和OP-系統將嘗試分配的JVM(顯示爲VIRT)的內存,但系統沒有答應ü它將分配物理內存,它可能掉;)

但你會發現VIRT仍不是10g,原因是10g是爲大小,一個JVM包括更多的堆,例如,堆棧,permgen(熱點JDK8,openJDK似乎沒有permgen,修復我,如果我錯了),本地堆棧,代碼,文件等。

而RES是用於真實物理內存的使用的是,它包含了新的對象,方法等等,還不止是堆。

+0

感謝您的信息,這是正確的用於JDK8的HotSpot中已刪除永久生成。 –

+0

是的,jdk8 +刪除permgen – Five