2015-07-21 70 views
2

如果將Xmx設置爲967或更高的值,我無法運行java。無法使用-Xmx> 966m運行java

C:\Documents and Settings\salesforce>java -Xmx967m -version Error occurred during initialization of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.

如果我運行相同的命令,但XMX設置爲966就可以正常運行:可

C:\Documents and Settings\salesforce>java -Xmx966m -version java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b17) Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode)

之前執行RAM的命令3GB(任務管理器)。

環境:

  • 的Java 1.7.0_25 32位
  • 的Windows Server 2003 SP2,4GB RAM

謝謝

+0

你可以運行'Java -Xmx966m MaxMemory'這將基於默認堆分配報告「最大內存」。 –

+0

它抱怨:找不到MaxMemory類。 @FredericHenri –

+0

抱歉代碼是這個問題[鏈接](http://stackoverflow.com/questions/1434779/maximum-java-heap-size-of-a-32-bit-jvm-on-a-64-bit- OS) –

回答

0

JVM使用不僅僅是堆大小多一點內部。根據配置的方式(perm空間,線程堆棧大小,線程數量等),這可能很容易佔據幾百MB。我相信,你正在使用32位的jvm,因此Windows 32位的最大進程大小爲2GB。我相信有辦法將其擴大到3GB(例如http://dwf.blogs.com/beyond_the_paper/2009/04/enabling-3gb-switch-on-windows-vista.html對此有一些解釋);但是自從我處於這種環境之後已經有一段時間了。所以你可能正在接近極限。

+0

謝謝你的回答,但我相信一定還有別的。將最大堆設置爲967並沒有達到2GB的進程限制。 –

+0

如果它告訴你它已經失去記憶,通常它不會說謊。由於某種原因,你認爲自己有足夠的記憶可能是錯誤的。您似乎已將其縮小到您仍可創建堆的確切數量。堆!=分配的內存。堆是可用於您的程序的位,但jvm也在此區域之外分配內存。另外,如果你正在從Java中加載任何可能分配堆內存的原生東西。所以,顯然有些東西不適合。不可能告訴沒有更多信息。 –

+0

你需要什麼信息? –