2012-07-14 26 views
0

我想運行一個超過1024M堆空間的特定Java程序。儘管我有4GB的RAM和32位的操作系統,但它的最大值是1024M。下面是我想用它來啓動程序批量代碼:爲什麼我得到JVM最大堆空間錯誤?

@echo off 
java -Xmx2048M -Xms2048M -jar program.jar 

有人能解釋爲什麼我得到一個JVM「無法保留足夠的空間」的錯誤?

+1

不知道你在運行什麼操作系統,但在Windows XP上,我只能分配1200-1400 MB。請參閱http://stackoverflow.com/questions/171205 – 2012-07-15 04:04:56

+0

在64位JVM上,您可以將堆大小設置爲任何值,但實際限制通常爲100 GB的數量級(因爲完整GC的長度與比例堆一致sixe) – 2012-07-15 07:02:49

+0

我使用的是總共4GB DDR3 RAM的Windows 7 32位操作系統。 – bigbass1997 2012-07-16 00:29:39

回答

1

你在Windows上,一個32位程序可以擁有的最大地址空間是2GB。 現在,由於流程和系統需要管理內容(例如.dlls),因此不能將所有這些2GB用於java堆。所以儘量少嘗試,例如1.5 GB。

您可以通過引導開關使32位程序獲得3GB的地址空間,請參閱here,如果您確實需要更多堆空間,則可以替代切換到64位操作系統。

0

由於在2048M大小的RAM中不能有連續的內存塊,因此您將得到「無法預留足夠空間」的錯誤。我建議你將-Xms減少到512M,因爲我不認爲你最初需要2048M的堆空間。如果這不起作用,那麼您將需要減少-Xmx值。

+0

讓我知道這是否有效。 – cyclotrojan 2012-07-14 23:41:26

+0

nope同樣的錯誤。我甚至嘗試了其他人的說法。 – bigbass1997 2012-07-14 23:53:07

相關問題