87

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

我知道在启动 java 时可以设置堆大小,但我想通过我服务器上的环境变量来调整它。

4

7 回答 7

87

你不能直接使用环境变量来做到这一点。您需要使用传递给 java 命令的一组“非标准”选项。运行:java -X 了解详情。您正在寻找的选项是 -Xmx 和 -Xms (这是“初始”堆大小,所以可能是您正在寻找的。)

像 Ant 或 Tomcat 这样的一些产品可能带有一个查找 JAVA_OPTS 环境变量的批处理脚本,但它不是 Java 运行时的一部分。如果您使用的是其中一种产品,则可以将变量设置为:

set JAVA_OPTS="-Xms128m -Xmx256m"  

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

set JAVA_OPTS="-Xms128m -Xmx256m"  
java ${JAVA_OPTS} MyClass
于 2009-01-06T16:32:34.243 回答
71

如果您想要任何java进程,而不仅仅是 ant 或 Tomcat,来选择-Xmx使用环境变量之类的选项_JAVA_OPTIONS

在 bash 中:export _JAVA_OPTIONS="-Xmx1g"

于 2013-07-12T11:11:03.783 回答
17

实际上,有一种方法可以通过环境变量为 Sun 的 JVM 设置全局默认值。

请参阅如何设置 java 系统属性,使其在我启动 JVM 时有效,而无需将其添加到命令行参数

于 2012-10-04T08:18:14.890 回答
17

您可以使用JAVA_TOOL_OPTIONS.

例子:

export JAVA_TOOL_OPTIONS=-Xmx512m

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

OP的问题很老了,但由于它是该问题的第一个谷歌结果,我想为了清楚起见我会在这里添加答案。

于 2019-11-08T02:31:53.800 回答
10

你不能使用环境变量来做到这一点。它是通过“非标准”选项完成的。运行:java -X了解详情。您正在寻找的选项是-Xmx-Xms(这是“初始”堆大小,所以可能是您正在寻找的。)

于 2009-01-06T16:21:49.570 回答
4

我认为您唯一的选择是将 java 包装在一个脚本中,该脚本将环境变量替换为命令行

于 2009-01-06T16:26:52.197 回答
3

几点注意事项:

  1. Apache ant 对 JAVA_OPTS 一无所知,而 Tomcat 的启动脚本则知道。对于 Apache ant,使用 ANT_OPTS 来影响运行 /ant/ 的 JVM 的环境,但不会影响 ant 可能启动的东西。

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

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

于 2010-02-18T15:55:28.260 回答