2014-02-05 33 views
5

如果我的機器上有16 GB的RAM,我可以分配給我正在執行的java命令行程序多少?我假設java -Xmx 16g...會使我的系統崩潰?我可以分配多少內存?

編輯:
在評論的光,我試過java -Xmx16g...,並沒有崩潰我的機器。該程序仍然耗盡內存。我試過java -Xmx32g...,它確實讓我的機器崩潰。

從下面的評論(這真的很有啓發性),我想我只需要繼續玩分配。

+3

當你嘗試時發生了什麼? –

+1

試試看看。 OS的提供[交換空間](http://en.wikipedia.org/wiki/Paging),使可用虛擬內存總量大於存在的物理內存量,只要不是所有的內存都需要同時頁面可以被「換出」)。 – TypeIA

+0

16克?當真? – 2014-02-05 17:02:34

回答

2

這個有關maximum heap size的鏈接對您有幫助。

這取決於您的操作系統。

6

在虛擬機的堆內存由選項控制的大小 - X毫秒- XMX

第一個指定初始堆大小和第二個最大大小。

分配在JVM本身內完成,而不是在OS上完成。當需要更多內存時,JVM會分配一塊內存直到達到Xmx。

如果您需要更多,則拋出OutOfMemoryError。

常見的是使用相同的值爲X毫秒XMX, 使VM僅在執行開始時分配在操作系統存儲器, 不依賴於OS特定行爲


在你的情況,因爲你設置32克爲您的XMX和你的系統崩潰,看來你沒有這個內存(SWAP +內存RAM)

如果手動更改您的系統的虛擬內存大小,配置將工作。

0

您的操作系統無法分配16GB以上的系統,從而導致系統崩潰。除了在另一個答案中陳述的XMX和XMS之外,還有一個-XX:+ AggressiveHeap選項,用於檢查機器資源(內存大小和處理器數量),並嘗試設置各種參數以使其適用於長時間運行的內存分配密集型工作