2009-10-30 39 views
1

我目前在SL4集羣上使用Sun的Java 1.6。在Linux上定義的默認JVM堆大小(SL4)

出於某種原因,1.6 JVM正在啓動與不可能大堆,而無法啓動:

java -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

如果我與例如啓動它-Xmx1800M,那麼它工作正常。所以,我想知道默認堆大小的設置,更重要的是如何改變它?

該機器擁有8GB的物理內存,我相信Sun的服務器JVM應該默認啓動一半512M的內存,但顯然並非如此,因爲它試圖分配超過1800M。

編輯:我意識到它可以使用_JAVA_OPTIONS,但是這感覺有點笨拙;我期待在某處有一個屬性文件,但到目前爲止我一直無法找到它。

+0

32或64位VM? VPS? 64位操作系統的權利?這有幫助嗎? http://forum.openvz.org/index.php?t=msg&goto=7057 – cletus 2009-10-30 12:06:34

+0

> uname -a Linux eddie004 2.6.18-128.7.1.el5#1 SMP Mon Aug 24 08:12:52 EDT 2009 x86_64 x86_64的x86_64的GNU/Linux的 我得到同樣的行爲,有或沒有-d64(和-server): > Java虛擬機 的初始化過程中出現-d64 -version 誤差對象堆無法保留足夠的空間 無法創建Java虛擬機。 鏈接很好;我認爲這一定是因爲機器有8G的物理內存,但每個用戶只允許2G使用它,這會讓JVM產生與規範不同的行爲。 – 2009-10-30 12:14:47

+0

對不起,該評論格式不正確。這是一個64位的操作系統,使用-d64並沒有什麼區別,服務器也沒有。 這可能與8G的機器有關,但限制用戶爲2G – 2009-10-30 13:08:36

回答

1

沒有這個屬性文件。根據Garbage Collector Ergonomics

初始堆尺寸:

較大的機器的 物理內存的1/64在機器上或一些 合理最小值。在J2SE 5.0, 之前,默認的初始堆大小爲 合理的最小值,其變化範圍爲 平臺。您可以使用-Xms命令行 選項覆蓋此默認值 。

最大堆尺寸:

較小物理 存儲器或1GB的1/4的。在J2SE 5.0之前, 的默認最大堆大小爲64MB。 您可以使用 -Xmx命令行選項覆蓋此默認值。


注:邊界和用於堆大小給定的級分是正確 爲J2SE 5.0。在後續版本中,它們可能與 不同,因爲 計算機變得更加強大。

給你有8GB的內存,默認最大堆大小應爲1GB假設你使用的Java 6

+0

好的,太棒了。但似乎並非如此,我什至不知道默認是什麼,因爲它不會從默認開始。任何想法爲什麼它沒有被設置爲1GB,並且可以做什麼?說這是我們擁有的JVM中的錯誤是否公平? – 2009-10-30 11:55:51

1

有沒有標準的屬性文件。 (Sun)JVM具有硬編碼的默認值。

+0

嗨Brian: 這是否意味着您只能在運行時更改堆大小?更確切地說,如果我更改默認值並重新啓動JVM,那麼堆大小是否會恢復爲「默認值硬編碼」? – 2010-08-08 02:36:08