如何设置一个非常大的 JVM 堆大小?

Posted

技术标签:

【中文标题】如何设置一个非常大的 JVM 堆大小?【英文标题】:How to set up a really big JVM heap size? 【发布时间】:2012-07-09 15:25:20 【问题描述】:

根据 JVM 6 文档,服务器类机器默认接收初始堆大小为 1/4 RAM 或 1GB。考虑到我们的 Solaris 64Bit 服务器有 64 GB,初始堆大小将默认为 256MB。因此,我需要使用 XMX 参数手动设置堆大小为 4GB。但是,当我添加“-Xmx4096M”时,Tomcat 不会启动。这是错误消息:

Invalid maximum heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

我的命令行参数应该是什么才能让我的堆增长到 4GB?

【问题讨论】:

您使用的是什么操作系统?一些较旧的操作系统不允许进程拥有超过 2 Gig。 Solaris(我刚刚更新了上面的问题) 您运行的是 64 位 jvm 吗? java -version 给我:java 版本“1.6.0_16”/Java(TM) SE Runtime Environment (build 1.6.0_16-b01)/Java HotSpot(TM) Server VM (build 14.2-b01) , 混合模式)。如何确定我的 VM 是否是为 64 位构建的? 您的响应应该是:java 版本“X”Java(TM) SE 运行时环境(构建 X)Java HotSpot(TM) 64 位服务器 VM(构建 Y,混合模式) 【参考方案1】:

感谢您的所有意见,伙计们!不过,我的java -version 的输出提到了mixed mode,这意味着它是64 位的。真正的解决方案是添加-d64 以强制它以64 位运行,因此分配4GB。

【讨论】:

表示“混合”模式的事实与您拥有 32 位或 64 位 JVM 的事实无关。这仅意味着您的 JVM 混合了“编译”和“解释”两种执行模式。【参考方案2】:

我的解决方案基于问题的 cmets:您使用的是 32 位 JVM,因此它不能处理超过 4GB(不包括在内)。尝试安装64位版本

【讨论】:

【参考方案3】:

根据java -version的输出,安装了一个32位的JVM。如果它是 64 位的,你应该得到类似 Java HotSpot(TM) 64-Bit Server VM 的东西。

尝试安装 64 位 JVM,它将解决您的问题。

【讨论】:

【参考方案4】:

使用 -Xmx1024M -XX:MaxPermSize=256M

【讨论】:

使用代码格式和完整的示例命令行,会使这个答案更好。

以上是关于如何设置一个非常大的 JVM 堆大小?的主要内容,如果未能解决你的问题,请参考以下文章

用更大的堆空间重新启动 JVM

排除 JVM 堆大小设置未传播到应用程序的故障

JVM优化

如何设定tomcat启动时JVM内存大小

如何设定tomcat启动时jvm内存大小

Java非常大的堆大小[关闭]