2011-12-31 29 views
2

我運行具有以下屬性的服務器:無法設置Java堆大小大於1568

的Windows Server 2008 R2標準 - 64 4GB RAM

我想設置堆大小3GB爲應用程序。我正在使用標誌-Xmx3G -Xms3G。在下面的錯誤標誌結果運行:

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

我一直在玩的設置,看看我的上限是什麼,結果發現1568是我的上限。我錯過了什麼?

回答

1

Java在啓動時需要連續的虛擬內存。在Windows上,32位應用程序在32位仿真環境中運行,因此您不會獲得比在32位操作系統中更多的連續內存。 C.F.在Solaris上,您可以獲得超過3 GB的32位Java虛擬內存。

我建議你使用64位版本的Java,因爲這會利用你擁有的所有內存。您仍然需要有空閒的內存,但較大的地址空間不會受到碎片影響。

BTW:堆空間只是使用的內存的一部分,您需要共享庫,直接內存,GUI組件等的內存。

2

系統上有多少物理內存可用(超出原始4 GB)?聽起來你的系統在啓動虛擬機時沒有3GB的物理內存。

請記住,JVM需要比分配給堆的內存更多的內存 - 還有其他數據結構(線程堆棧等)也需要內存。所以您提供的設置嘗試使用超過3GB的內存。

另外,你使用的是64位的jvm嗎?根據this document,32位虛擬機上堆大小的實際限制爲1.4到1.6千兆字節。