我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我遇到了增加堆最大大小的问题。到目前为止,我尝试了以下方法:
设置-Xmx参数,例如-Xmx3000m。这种方法在创建JVM时失败。根据我用Google搜索,看起来-Xmx必须小于2GB。
使用-XX:+AggressiveHeap option。当我尝试这种方法时,我得到一个“内存不足”错误,告诉堆大小为1273.4 MB,即使我的计算机有8GB内存。
是否有其他方法可以尝试增加JVM的最大堆大小?以下是计算机规格的摘要:
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)
答案 0 :(得分:90)
在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB。所以,如果你想超越它,你需要在64模式下调用JVM。
您可以使用以下内容:
$ java -d64 -Xms512m -Xmx4g HelloWorld
其中,
您可以根据您的要求(YMMV)调整-Xms和-Xmx
JVM性能调优的非常好的资源,可能需要查看:http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
答案 1 :(得分:45)
从Oracle获取64位JVM。
答案 2 :(得分:14)
我认为2GB限制适用于32位Java。我认为v1.6总是64位,但尝试强制64位模式只是为了看:添加-d64选项。
答案 3 :(得分:8)
32位Java限制在大约1.4到1.6 GB之间。
引用
32位JVM的最大理论堆限制为4G。由于各种附加约束,例如可用交换,内核地址空间使用,内存碎片和VM开销,实际上限制可以低得多。在大多数现代32位Windows系统上,最大堆大小范围为1.4G到1.6G。在32位Solaris内核上,地址空间限制为2G。在运行32位VM的64位操作系统上,最大堆大小可能更高,在许多Solaris系统上接近4G。
答案 4 :(得分:3)
下面的内容对我有用:
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 "$@"
答案 5 :(得分:0)
就我而言,
-Xms1024M -Xmx1024M 正常工作
-Xms1024M -Xmx2048M 结果:无法为对象堆保留足够的空间
使用JVM 64位后,它允许使用2GB RAM,因为我使用的是win server 2012
https://www.codementor.io/@suryab/does-32-bit-or-64-bit-jvm-matter-anymore-w0sa2rk6z
答案 6 :(得分:-2)