91

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

  • 设置-Xmx 参数,例如-Xmx3000m。这种方法在创建 JVM 时失败。从我用谷歌搜索的内容来看,-Xmx 必须小于 2GB。

  • 使用-XX:+AggressiveHeap 选项。当我尝试这种方法时,我收到一个“内存不足”错误,表明堆大小为 1273.4 MB,即使我的计算机有 8GB 内存。

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

  • 操作系统:Windows 7(64 位)
  • 处理器:英特尔酷睿 i7 (2.66 GHz)
  • 内存: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)
4

7 回答 7

101

在 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

于 2010-06-18T04:57:27.597 回答
49

从Oracle获取 64 位 JVM 。

于 2010-06-12T22:18:32.067 回答
15

我相信 2GB 限制适用于 32 位 Java。我认为 v1.6 始终是 64 位,但尝试强制 64 位模式只是为了查看:添加 -d64 选项。

于 2010-06-12T22:21:23.557 回答
8

32 位 Java 被限制为大约 1.4 到 1.6 GB。

Oracle 32 位堆常见问题解答

引用

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

于 2013-07-22T15:28:30.710 回答
4

下面的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 "$@"
于 2015-04-21T16:22:33.767 回答
0

对于内存密集型应用程序,GraalVm 可以作为更好的选择。提供 32 GB 作为最大堆大小和其他好处。 热点 vs Graal

于 2022-02-24T10:33:53.050 回答
0

就我而言,

-Xms1024M -Xmx1024M 有效

-Xms1024M -Xmx2048M 结果:无法为对象堆保留足够的空间

使用 JVM 64 位后,它允许使用 2GB RAM,因为我使用的是 win server 2012

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

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

于 2021-01-11T04:10:35.397 回答