2017-01-04 65 views
14

我正在監視OutOfMemoryException的火花執行器JVM。我使用Jconsole來連接執行器JVM。以下是JConsole的快照: enter image description here已用,已提交和最大堆內存差異

在圖像中使用的存儲器被示爲3.8G和提交內存是8.6克和Max存儲器也將8.6g 任何人都可以解釋二手和提交的內存或任何鏈路之間的差這解釋了它。

+5

https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryUsage.html – stark

+3

的[可能的複製爲什麼一個JVM報告更致力於內存比Linux進程駐留設置大小?](http://stackoverflow.com/questions/31173374/why-does-a-jvm-report-more-committed-memory-than-the-linux-process-resident-set) – the8472

回答

3

MemoryUsage的Java文檔,

getUsed是:

使用的存儲器的以字節爲單位

getCommitted()的量

返回爲Java 虛擬機提交使用的內存量(以字節爲單位)。這個內存量可以保證 Java虛擬機的使用。

GetMax的()

返回以字節爲單位,可用於 存儲器管理的存儲器的最大量。如果未定義最大內存大小 ,此方法返回-1。

如果內存量大於已提交內存的數量,則不保證內存量可用於內存管理器 。即使 已用內存的數量未超過此最大大小,Java虛擬機也可能無法分配內存。