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

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

我知道启动java时可以设置堆大小,但我希望通过我的服务器上的环境variables来调整。

你不能直接使用环境variables。 您需要使用传递给java命令的一组“非标准”选项。 运行:java -X获取详细信息。 你正在寻找的选项是-Xmx和-Xms(这是“初始”堆大小,所以可能是你在找什么。)

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

set JAVA_OPTS="-Xms128m -Xmx256m" 

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

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

如果你想要任何java进程,不仅仅是ant或者Tomcat,而且要使用环境variables_JAVA_OPTIONS来select-Xmx这样的选项。

在bash中: export _JAVA_OPTIONS="-Xmx1g"

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

请参阅如何设置java系统属性,以便在启动JVM时不会将其添加到命令行参数中,从而使其生效 。

你不能使用环境variables。 这是通过“非标准”选项完成的。 运行: java -X获取详细信息。 你正在寻找的选项是-Xmx-Xms (这是“初始”堆大小,所以可能是你在找什么。)

我认为你唯一的select是将java包装在一个脚本中,该脚本将环境variablesreplace为命令行

几个注意事项:

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

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

  3. 对于服务器环境,您通常需要将-Xms和-Xmx设置为相同的值:这将修复特定大小的堆的大小,并且垃圾收集器的工作量会减less,因为堆不会被重新调用,大小。