有大量關於堆大小的Posts和網站,但沒有一個提到如何找出調用jvm時可以保留的最大可能堆大小。預留Java JVM最大堆大小
該任務是以最大可用堆大小xmx = max動態啓動我的jvm(無需在此處討論此任務的對象!)。
人們會想到讀取當前可用或空閒的內存,並將該大小用於xms和xmx。但這不起作用。
例如在64位計算機和Windows操作系統,具有24GB RAM上,約1.8 GB上可用的虛擬存儲器:
在JVM(那些已經通過其在進程中執行的Java命令C#確定)用32位啓動!根據其他網站和帖子,如:Maximum Java heap size of a 32-bit JVM on a 64-bit OS它應該在1.4GB以上變化。
[09.07.2015 08:39:39] Total physical memory MB: 24002
[09.07.2015 08:39:39] Available physical memory MB: 16115
[09.07.2015 08:39:39] Total virtual memory MB: 2047
[09.07.2015 08:39:39] Available virtual memory MB: 1810
調用Java程序:
的Java -Xms1536m -Xmx1536m對myApp
導致:
Could not reserve enough space for 1572864KB object heap
同樣下降到1136米一路,這是儘可能最大!
因此我的問題: 如何檢查堆棧大小可能調用jvm,沒有試驗的錯誤嗎?
UDPATE: 基於這些意見,我提出了所有那些Pro的另一個問題: 你們如何運行你的Java應用程序?
- 選擇你檢查了應用程序的堆需要約。並讓用戶死於一個錯誤,如果堆不可能
- 試驗一個錯誤:降低堆並重新運行你的應用程序,直到發現有效的最大堆
- 使用這種祕密的方式來確定保證的最大堆大小和運行它順利(如果是這樣,請放在你的信任圈:))
我對你的答案絕對好奇!
'只有1136米是可能的!'你使用的是32位JRE嗎? –
@FranMontero對不起,我忘記了這一點,看到更新回答 – gantners
其實我在幾周前發佈了一個類似的問題XD http:// stackoverflow。com/questions/31533378 /無法運行-java-with-xmx-966m/31534282#comment51067983_31534282 –