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


76

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

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


接受的答案已过期,不再适用。如果您在这里结束,请参考@Gauthier的答案
Layman

Answers:


80

您不能直接使用环境变量来做到这一点。您需要使用传递给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插件生成的脚本使用。
突变鲍勃

2
正如@neves在下面的注释中提到的那样,在Java 7(docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/…)中已更改。您可以使用JAVA_TOOL_OPTIONS(请参见下面的链接和答案)
keisar




7

您可以使用JAVA_TOOL_OPTIONS

例:

export JAVA_TOOL_OPTIONS=-Xmx512m

在一些评论中和 另一个答案中

OP的问题已经很老了,但是由于它是该问题的第一个Google结果,我想为了清楚起见,我会在此处添加答案。


4

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


3

一些注意事项:

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

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

  3. 对于服务器环境,通常需要将-Xms和-Xmx设置为相同的值:这会将堆的大小固定为一定的大小,并且垃圾回收器的工作量减少了,因为不再需要重新堆大小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.