_JAVA_OPTIONS JAVA_TOOL_OPTIONS和JAVA_OPTS之间的区别
我认为在_JAVA_OPTIONS
和JAVA_TOOL_OPTIONS
之间进行比较会很好。 我一直在寻找一个,但我找不到任何东西,所以我希望我们可以在这里findStackoverflow的知识。
包含JAVA_OPTS
的完整性。 它不是JVM的一部分,但是有很多关于它的问题。
我知道的:
到目前为止,我已经发现:
- JDK不使用
JAVA_OPTS
,而是使用其他一些应用程序(请参见本文 )。 -
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
是将JVM参数指定为环境variables而不是命令行参数的方法。- 至less被
java
和javac
拾取 - 他们有这个优先权:
-
_JAVA_OPTIONS
(覆盖其他) - 命令行参数
-
JAVA_TOOL_OPTIONS
(被其他人覆盖)
-
- 至less被
我想知道的
- 有没有比较
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
官方文档 -
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
之间是否有其他区别(优先级除外)? - 哪个可执行文件
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
(除了java
和javac
) - 对
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
可以包含什么限制
正式文件
我一直无法find关于_JAVA_OPTIONS
任何文档。 JAVA_TOOL_OPTIONS
的文档并没有说明差别:
由于不能总是访问或修改命令行,例如在embedded式VM中或者在脚本内部深入启动的VM中,会提供JAVA_TOOL_OPTIONSvariables,以便在这些情况下启动代理。
…
示例脚本
这是我用来解决这个问题的代码。 控制台输出包含在注释中:
export JAVA_OPTS=foobar export JAVA_TOOL_OPTIONS= export _JAVA_OPTIONS="-Xmx512m -Xms64m" java -version # Picked up JAVA_TOOL_OPTIONS: # Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m # java version "1.7.0_40" OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64) OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode) javac -version # Picked up JAVA_TOOL_OPTIONS: # Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m # javac 1.7.0_40 export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1" export _JAVA_OPTIONS="-Xmx512m -Xms64m" javac -version # Picked up JAVA_TOOL_OPTIONS: -Xmx1 -Xms1 # Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m # javac 1.7.0_40 export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m" export _JAVA_OPTIONS="-Xmx1 -Xms1" javac -version # Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m # Picked up _JAVA_OPTIONS: -Xmx1 -Xms1 # Error occurred during initialization of VM # Too small initial heap export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1" export _JAVA_OPTIONS= java -Xmx512m -Xms64m -version # Picked up JAVA_TOOL_OPTIONS: -Xmx1 -Xms1 # Picked up _JAVA_OPTIONS: # java version "1.7.0_40" # OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64) # OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode) export JAVA_TOOL_OPTIONS= export _JAVA_OPTIONS="-Xmx1 -Xms1" java -Xmx512m -Xms64m -version # Picked up JAVA_TOOL_OPTIONS: # Picked up _JAVA_OPTIONS: -Xmx1 -Xms1 # Error occurred during initialization of VM # Too small initial heap
除了即使通过库调用启动JVM进程,也可以select这些选项。
_JAVA_OPTIONS
没有logging的事实表明不build议使用这个variables,而且我已经看到有人通过在~/.bashrc
设置来滥用它。 但是,如果您想深究此问题,则可以检查Oracle HotSpot VM的源代码(例如, 在OpenJDK7中 )。
您还应该记住,不能保证其他虚拟机已经或将继续支持无证variables。
UPDATE 2015-08-04:为了节省五分钟来自search引擎的人员, _JAVA_OPTIONS
胜过了命令行参数,这反过来又胜过了JAVA_TOOL_OPTIONS
。
还有一个区别: _JAVA_OPTIONS
是Oracle特定的。 IBM JVM正在使用IBM_JAVA_OPTIONS
。 这可能是为了能够定义特定于机器的选项而没有冲突。 JAVA_TOOL_OPTIONS
被所有的VM识别。
JAVA_OPTS
在JVM中根本没有特别的处理 。
根据https://bugs.openjdk.java.net/browse/JDK-4971166,JAVA_TOOL_OPTIONS包含在标准的JVMTI规范中,对引用的空格做了更好的处理,并且应该总是优先于未;_JAVA_OPTIONS
的特定于热点的_JAVA_OPTIONS
。
另外请注意,使用这些打印额外的消息到不能被压制的标准输出 。