如何通过环境变量设置Java的最小堆和最大堆大小?
我知道在启动Java时可以设置堆大小,但我希望在我的服务器上通过环境变量进行调整。
如何通过环境变量设置Java的最小堆和最大堆大小?
我知道在启动Java时可以设置堆大小,但我希望在我的服务器上通过环境变量进行调整。
直接使用环境变量是无法做到的。您需要使用传递给java命令的一组“非标准”选项。运行: java -X 以获取详细信息。您要查找的选项是 -Xmx 和 -Xms(这是“初始”堆大小,所以可能是您要查找的内容)。
一些产品(如Ant或Tomcat)可能会带有批处理脚本,用于查找JAVA_OPTS环境变量,但它不是Java运行时的一部分。如果您正在使用这些产品之一,则可以像这样设置变量:
set JAVA_OPTS="-Xms128m -Xmx256m"
你也可以使用自己的命令行来采取这种方法,例如:
set JAVA_OPTS="-Xms128m -Xmx256m"
java ${JAVA_OPTS} MyClass
JAVA_OPTS
技术也被 Maven Appassemble 插件生成的脚本所使用。 - Mutant Bobjava
进程,不仅限于ant或Tomcat,都可以使用像-Xmx
这样的选项,请使用环境变量_JAVA_OPTIONS
。export _JAVA_OPTIONS="-Xmx1g"
JAVA_TOOL_OPTIONS
。export JAVA_TOOL_OPTIONS=-Xmx512m
在一些评论和另一个答案中提到过。
虽然这个问题已经很久了,但由于它是谷歌搜索结果中的第一个问题,我想为了清晰起见在这里添加答案。
你不能使用环境变量来完成这个操作。它是通过“非标准”的选项完成的。运行:java -X
可以查看详情。你要找的选项是 -Xmx
和 -Xms
(这是“初始”堆大小,也就是你可能要找的东西)。
注意事项:
Apache ant不了解JAVA_OPTS,而Tomcat的启动脚本了解。对于Apache ant,请使用ANT_OPTS来影响运行/ant/的JVM环境,但不要影响ant可能启动的其他内容。
您可以设置的最大堆大小完全取决于环境:对于大多数32位系统,无论可用内存如何,您可以请求的最大堆空间在2GiB范围内。在64位系统上,最大堆非常大。此外,由于堆由JVM管理,您也受物理内存的实际限制,因为您不希望有太多的交换到磁盘。
对于服务器环境,通常希望将-Xms和-Xmx设置为相同的值:这将在某个特定大小上固定堆的大小,并且垃圾收集器的工作量会减少,因为堆永远不需要重新调整大小。