java - Java內存管理 Java web啟動"Error: could not create the java virtual machine"

  显示原文与译文双语对照的内容
0 0

我已經定義了一個jnlp文件 initial-heap-size="512m" max-heap-size="1024m" 在具有 12Gb 可用的16Gb的機器上。 運行的JVM是一個 32位 JVM,因為本機庫。 我明白,我必須有 1Gb 個連續內存才能分配。 如果我將 max-heap-size 減少到 768,那麼它正常運行,有時我不需要減少它。

兩個問題:

  1. 為什麼機器在JVM啟動之前先檢查 max-heap-size? 是否存在正在執行的斷言?

  2. 如果有可以用的12Gb 個連續的1Gb 塊,為什麼我不能從is分配完整 1Gb?

时间: 原作者:

0 0

如果你不能使用 64位 jvm 。

如果在 Windows 上,使用 32位,你需要研究"大地址識別"( 編譯/鏈接到/LARGEADDRESSAWARE 選項) 。 它將允許你在 32位 中使用更大的內存佔用。 你可以在特定的可執行文件上設置位。

http://stackoverflow.com/questions/2288728/drawbacks-of-using-largeaddressaware-for-32-bit-windows-executables

如果在Linux上,看看你的系統硬或者軟限制。 這可能會限制你的進程的最大大小。 另外,你可能有過程式控制制組。

對於 ulimit,在 linux/unix上嘗試

 
ulimit -a

 

具體看一下 ulimit -m或者-v設置。 如果這些是無限的,你可能會遇到另一種控制機制。

原作者:
0 0

部分有價值的猜測:

如果有可以用的12Gb 個連續的1Gb 塊,為什麼我不能從is分配完整 1Gb?

你寫了JVM運行是一個 32位 JVM,因為本。 但是如果你不分配大量內存,那麼你可能仍然會遇到 fragment的虛擬地址空間( 你只能在沒有LARGESPACEAWARE的情況下) 。 你可能需要研究本地庫的基本地址和不斷變化的屬性。 有一個叫做 VMMap插件的免費工具,這對研究這些問題非常有用。

原作者:
...