2010-06-12 53 views
69

我需要運行使用大於2GB的Java內存密集型應用程序,但我遇到了增加堆最大大小的問題。到目前爲止,我已經嘗試了以下方法:爲內存密集型應用程序增加JVM最大堆大小

  • 設置-Xmx參數,例如, -Xmx3000m。這種方法在創建JVM時失敗。從我搜索的內容來看,它看起來像-Xmx必須小於2GB。

  • 使用-XX:+AggressiveHeap option。當我嘗試這種方法時,即使我的計算機有8GB的內存,我也會得到一個「內存不足」的錯誤,指出堆大小爲1273.4 MB。

是否有另一種方法可以嘗試增加JVM的最大堆大小?這裏的計算機規範的摘要:

  • 操作系統:Windows 7(64位)
  • 處理器:Intel Core I7(2.66千兆赫)
  • 內存:8 GB
  • Java的版本:
java version "1.6.0_18" 
Java(TM) SE Runtime Environment (build 1.6.0_18-b07) 
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing) 
+6

BTW:現在的最小和最大內存大小是標準選項。您可以使用-ms和-mx來代替-Xms和-Xmx。 -X??保留給非標準選項。 – 2010-06-18 07:05:34

+1

JVM的標準?對於HotSpot JVM,它們仍然不是標準的(從1.8開始)。請參閱http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDJJFI – Huckle 2015-05-02 19:38:14

回答

43

讓自己從一個位JVM。

+1

爲我工作:-)到目前爲止使用-Xmx4g運行應用程序並沒有任何問題。 – 2010-06-12 23:10:14

14

我相信2GB限制是針對32位Java的。我認爲v1.6總是64位,但試着強制64位模式只是看到:添加-d64選項。

+0

-D64選項不起作用,我會嘗試使用GregS建議的64位JVM並報告結果。 – 2010-06-12 22:33:01

+1

-d64和-d32交換機僅在Solaris上正常工作(至少根據這些文檔):http://java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_layering。 – 2010-06-12 22:43:03

+0

@Alceu是否使用過-D64或-d64?他們是不同的... – Greg 2010-06-12 22:44:33

79

當您在32位模式下使用JVM時,可以分配的最大堆大小爲1280 MB。所以,如果你想超越這個範圍,你需要在64模式下調用JVM。

可以使用以下:

$ java -d64 -Xms512m -Xmx4g HelloWorld 

其中,

  • -d64:將啓用64位JVM
  • -Xms512m:將設定的初始堆尺寸爲512 MB
  • -Xmx4g:將最大堆大小設置爲4 GB

您可以調整在-Xms和-Xmx按你的要求(因人而異)在JVM性能調整

一個很好的資源,這可能要考慮:http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

+0

我的JVM是32位的,最大允許-Xmx1024M。也將嘗試64位版本。 – kiltek 2013-06-22 14:30:33

+0

我試過JVM 64位,它的工作完美。現在我可以設置4096 MB的最大堆大小。 當您同時安裝了32位和64位時,至少在Windows上,您需要將應用程序的Java路徑指向安裝的新64位版本。否則,錯誤將會持續。 在Windows上,通常可以通過更改系統環境變量上的Java路徑來完成。 – Fabiano 2015-02-02 23:10:09

+0

我猜最大堆的限制不是1280,而是接近1700MB。我在32位JVM安裝上使用了1600MB的最大堆,它工作正常。 – Fabiano 2015-02-02 23:12:05

8

32位Java限制爲約1.4至1.6 GB。

Oracle 32 bit heap FAQ

報價

的最大理論堆限制爲32位JVM是4G。由於可用交換,內核地址空間使用,內存碎片和虛擬機開銷等各種附加限制,實際上限制可能會低得多。在大多數現代的32位Windows系統上,最大堆大小的範圍從1.4G到1.6G。在32位Solaris內核上,地址空間限制爲2G。在運行32位VM的64位操作系統上,最大堆大小可能會更高,在許多Solaris系統上接近4G。

2

下面的conf工作對我來說:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/ 
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH 
export PATH 
export JAVA_HOME 

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server" 

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "[email protected]"