增加内存密集型应用程序的JVM最大堆大小
我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我有问题增加了堆的最大大小。 到目前为止,我已经尝试了以下方法:
-
设置-Xmx参数,例如-Xmx3000m。 这种方法在创buildJVM时失败。 从我googlesearch,看起来像-Xmx必须小于2GB。
-
使用-XX:+ AggressiveHeap选项 。 当我尝试这种方法时,出现“内存不足”的错误,告知堆大小为1273.4 MB,即使我的计算机有8GB的内存。
有没有另一种方法可以尝试增加JVM的最大堆大小? 以下是计算机规格的摘要:
- 操作系统:Windows 7(64位)
- 处理器:Intel Core i7(2.66 GHz)
- 内存:8 GB
- java -version:
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)
从Oracle获得一个64位的JVM。
在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB。 所以,如果你想超越这个,你需要在64模式下调用JVM。
您可以使用以下内容:
$ java -d64 -Xms512m -Xmx4g HelloWorld
哪里,
- -d64:将启用64位JVM
- -Xms512m:将初始堆大小设置为512 MB
- -Xmx4g:将最大堆大小设置为4 GB
您可以根据您的要求调整-Xms和-Xmx(YMMV)
JVM性能调优的一个非常好的资源,可能需要考虑: http : //java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
我相信2GB限制是针对32位Java的。 我以为v1.6总是64位,但试着强制64位模式只是看到:添加-d64选项。
32位Java被限制在1.4到1.6 GB左右。
Oracle 32位堆FAQ
引用
32位JVM的最大理论堆栈限制是4G。 由于可用交换,内核地址空间使用,内存碎片和虚拟机开销等各种附加限制,实际上限制可能会低得多。 在大多数现代的32位Windows系统上,最大堆大小的范围从1.4G到1.6G。 在32位Solaris内核上,地址空间限制为2G。 在运行32位虚拟机的64位操作系统上,最大堆大小可能会更高,在许多Solaris系统上接近4G。
下面的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 "$@"