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

时间:2010-06-12 22:05:11

标签: java jvm jvm-arguments

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

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

  • 使用-XX:+AggressiveHeap option。当我尝试这种方法时,我得到一个“内存不足”错误,告诉堆大小为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)

7 个答案:

答案 0 :(得分:90)

在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB。所以,如果你想超越它,你需要在64模式下调用JVM。

您可以使用以下内容:

$ java -d64 -Xms512m -Xmx4g HelloWorld

其中,

  • -d64:将启用64位JVM
  • -Xms512m:将初始堆大小设置为512 MB
  • -Xmx4g:将最大堆大小设置为4 GB

您可以根据您的要求(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之间。

Oracle 32 bit heap FAQ

引用

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

请查看多个操作系统上 JVM 32 位可用的最大堆大小 Xmx for JVM 32bit

https://www.codementor.io/@suryab/does-32-bit-or-64-bit-jvm-matter-anymore-w0sa2rk6z

答案 6 :(得分:-2)

我有“相似的”内存问题,无法通过JSONReader节点解析400mb的json文件。

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

enter image description here

我的笔记本电脑的RAM为16GB,这样就足够了吧?

->安装详细信息:knime_3.6.2 \ plugins / org.knime.binary.jre.win32.x86_64_1.8.0.152-01 / jre / bin \ server \ jvm.dll

Thx,

H