我认为对比_JAVA_OPTIONS
和JAVA_TOOL_OPTIONS
会很有意义。我已经搜索了一些内容,但是没有找到任何有用的信息,所以我希望我们可以在Stackoverflow上找到答案。
JAVA_OPTS
仅仅是用于完整性考虑,它不是JVM的一部分,但在外部有很多关于它的问题。
目前我所知道的:
到目前为止,我发现:
JAVA_OPTS
不被JDK使用,但被许多其他应用程序使用(请参见该帖子)。JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
是将JVM参数指定为环境变量而不是命令行参数的方法。- 它们至少被
java
和javac
识别 - 它们具有以下优先级:
_JAVA_OPTIONS
(覆盖其他选项)- 命令行参数
JAVA_TOOL_OPTIONS
(被其他选项覆盖)
- 它们至少被
我想了解的内容
- 是否有任何官方文档比较
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
之间是否有其他差异(除了优先级)。- 哪些可执行文件除了
java
和javac
之外还可以选择JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
? - 在
JAVA_TOOL_OPTIONS
和_JAVA_OPTIONS
中是否有任何限制?
官方文档
我没有找到任何关于_JAVA_OPTIONS
的文档。有关JAVA_TOOL_OPTIONS
的文档并没有详细说明它们之间的区别:
由于并不总是能够访问或修改命令行,例如在嵌入式VM中或仅深度脚本中启动的VM中,因此提供了JAVA_TOOL_OPTIONS变量,以便在这些情况下启动代理。
...
示例脚本
这是我用来找出这个问题的代码。控制台输出包含在注释中:
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
JDK_JAVA_OPTIONS
已成为首选替代项,请参阅https://dev59.com/JVQJ5IYBdhLWcg3w2Jm8。 - ryenus