增加内存密集型应用程序的JVM最大堆大小

我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我遇到了增加堆最大大小的问题 . 到目前为止,我尝试了以下方法:

  • 设置-Xmx参数,例如-Xmx3000m . 这种方法在创建JVM时失败 . 从我用Google搜索,看起来-Xmx必须小于2GB .

  • 使用-XX:+AggressiveHeap option . 当我尝试这种方法时,我得到一个'Not enough memory'错误,告诉堆大小是1273.4 MB,即使我的计算机有8GB的内存 .

是否有另一种方法可以尝试增加JVM的最大堆大小?以下是计算机规格的摘要:

  • 操作系统:Windows 7(64位)

  • 处理器:Intel Core i7(2.66 GHz)

  • 内存:8 GB

  • java -version:

java版“1.6.0_18”
Java(TM)SE运行时环境(版本1.6.0_18-b07)
Java HotSpot(TM)客户端VM(内置16.0-b13,混合模式,共享)

回答(6)

3 years ago

Oracle获取64位JVM .

3 years ago

在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

3 years ago

我相信2GB限制是针对32位Java的 . 我认为v1.6总是64位,但尝试强制64位模式只是为了看:添加-d64选项 .

3 years ago

32位Java限制在大约1.4到1.6 GB之间 .

Oracle 32 bit heap FAQ

引用

32位JVM的最大理论堆限制为4G . 由于各种附加约束,例如可用交换,内核地址空间使用,内存碎片和VM开销,实际上限制可以低得多 . 在大多数现代32位Windows系统上,最大堆大小范围为1.4G到1.6G . 在32位Solaris内核上,地址空间限制为2G . 在运行32位VM的64位操作系统上,最大堆大小可能更高,在许多Solaris系统上接近4G .

3 years ago

以下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 "$@"

3 years ago

我有“类似”的内存问题,通过JSONReader节点解析400mb json文件 .

我在knime.ini中增加了-Xmx12228m,但堆积空间似乎上限为5462mb

enter image description here

我的笔记本电脑有16GB的内存,所以这应该足够了吧?

  • 安装细节:knime_3.6.2 \ plugins / org.knime.binary.jre.win32.x86_64_1.8.0.152-01 / jre / bin \ server \ jvm.dll

谢谢,

H