如何通过环境变量设置Java的最小堆和最大堆大小?

95

如何通过环境变量设置Java的最小堆和最大堆大小?

我知道在启动Java时可以设置堆大小,但我希望在我的服务器上通过环境变量进行调整。


被接受的答案已经过时,不再适用。如果你来到这里,请参考 @Gauthier 的回答。 - Layman
7个回答

94

直接使用环境变量是无法做到的。您需要使用传递给java命令的一组“非标准”选项。运行: java -X 以获取详细信息。您要查找的选项是 -Xmx 和 -Xms(这是“初始”堆大小,所以可能是您要查找的内容)。

一些产品(如Ant或Tomcat)可能会带有批处理脚本,用于查找JAVA_OPTS环境变量,但它不是Java运行时的一部分。如果您正在使用这些产品之一,则可以像这样设置变量:

set JAVA_OPTS="-Xms128m -Xmx256m"  

你也可以使用自己的命令行来采取这种方法,例如:

set JAVA_OPTS="-Xms128m -Xmx256m"  
java ${JAVA_OPTS} MyClass

1
JAVA_OPTS 技术也被 Maven Appassemble 插件生成的脚本所使用。 - Mutant Bob
3
正如@neves在下面的评论中提到的,这在Java 7中已经改变(https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/envvars.html)。您可以使用JAVA_TOOL_OPTIONS(请参见以下链接和答案)。 - keisar

77
如果想让任何java进程,不仅限于ant或Tomcat,都可以使用像-Xmx这样的选项,请使用环境变量_JAVA_OPTIONS
在bash中:export _JAVA_OPTIONS="-Xmx1g"

2
太完美了,这个很好用,让我省了很多时间。 - rodnaph
3
在Windows中:set _JAVA_OPTIONS=-Xmx1g为了使其永久生效,创建一个新的环境变量 _JAVA_OPTIONS 并将其设置为 -Xmx1g - tim_hutton

38
你可以使用JAVA_TOOL_OPTIONS
示例:
export JAVA_TOOL_OPTIONS=-Xmx512m

在一些评论和另一个答案中提到过。

虽然这个问题已经很久了,但由于它是谷歌搜索结果中的第一个问题,我想为了清晰起见在这里添加答案。


2
应该成为新的被接受的答案。 - GG.

17

9

你不能使用环境变量来完成这个操作。它是通过“非标准”的选项完成的。运行:java -X 可以查看详情。你要找的选项是 -Xmx-Xms(这是“初始”堆大小,也就是你可能要找的东西)。


2
它似乎在Java 7中发生了变化:http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/envvars.html - neves

4
我认为你唯一的选择是将Java封装在一个脚本中,然后将环境变量替换到命令行中。

3

注意事项:

  1. Apache ant不了解JAVA_OPTS,而Tomcat的启动脚本了解。对于Apache ant,请使用ANT_OPTS来影响运行/ant/的JVM环境,但不要影响ant可能启动的其他内容。

  2. 您可以设置的最大堆大小完全取决于环境:对于大多数32位系统,无论可用内存如何,您可以请求的最大堆空间在2GiB范围内。在64位系统上,最大堆非常大。此外,由于堆由JVM管理,您也受物理内存的实际限制,因为您不希望有太多的交换到磁盘。

  3. 对于服务器环境,通常希望将-Xms和-Xmx设置为相同的值:这将在某个特定大小上固定堆的大小,并且垃圾收集器的工作量会减少,因为堆永远不需要重新调整大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接