如何通过环境变量设置Java的最小和最大堆大小?
我知道可以在启动Java时设置堆大小,但是我希望通过服务器上的环境变量对此进行调整。
Answers:
您不能直接使用环境变量来做到这一点。您需要使用传递给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插件生成的脚本使用。
如果您想让任何java
进程(而不只是ant或Tomcat)选择诸如-Xmx
环境变量之类的选项_JAVA_OPTIONS
。
在bash中: export _JAVA_OPTIONS="-Xmx1g"
实际上,有一种方法可以通过环境变量设置Sun JVM的全局默认值。
您不能使用环境变量来做到这一点。这是通过“非标准”选项完成的。运行:java -X
获取详细信息。你要找的选项-Xmx
和-Xms
(这是“初始”堆大小,所以可能你在找什么。)
一些注意事项:
Apache ant对JAVA_OPTS一无所知,而Tomcat的启动脚本却对。对于Apache ant,请使用ANT_OPTS来影响运行/ ant /的JVM的环境,但不影响ant可能启动的环境。
您可以设置的最大堆大小完全取决于环境:对于大多数32位系统,无论可用内存如何,您可以请求的最大堆空间量在2GiB范围内。64位系统上最大的堆是“很大”。另外,由于堆是由JVM管理的,因此您实际上也受到物理内存的限制,并且您不希望对磁盘进行大量交换。
对于服务器环境,通常需要将-Xms和-Xmx设置为相同的值:这会将堆的大小固定为一定的大小,并且垃圾回收器的工作量减少了,因为不再需要重新堆大小。