【发布时间】:2015-04-04 08:14:30
【问题描述】:
我认为在_JAVA_OPTIONS 和JAVA_TOOL_OPTIONS 之间进行比较会很棒。
我一直在寻找一个,但我找不到任何东西,所以我希望我们可以在 Stackoverflow 上找到知识。
JAVA_OPTS 包含在内是为了完整性。它不是 JVM 的一部分,但有很多关于它的问题。
我知道的:
到目前为止,我发现:
-
JAVA_OPTS不被 JDK 使用,而是被许多其他应用程序使用(参见 this post)。 -
JAVA_TOOL_OPTIONS和_JAVA_OPTIONS是将 JVM 参数指定为环境变量而不是命令行参数的方法。- 至少被
java和javac拾取 - 它们具有以下优先级:
-
_JAVA_OPTIONS(覆盖其他) - 命令行参数
-
JAVA_TOOL_OPTIONS(被其他人覆盖)
-
- 至少被
我想知道什么
- 有没有官方文档比较
JAVA_TOOL_OPTIONS和_JAVA_OPTIONS -
JAVA_TOOL_OPTIONS和_JAVA_OPTIONS之间是否还有其他区别(优先级除外)。 - 哪些可执行文件选择
JAVA_TOOL_OPTIONS和_JAVA_OPTIONS(除了java和javac) - 对
JAVA_TOOL_OPTIONS和_JAVA_OPTIONS中可以包含的内容的任何限制
官方文档
我找不到任何关于_JAVA_OPTIONS 的文档。 The documentation for JAVA_TOOL_OPTIONS 并没有说明差异:
由于不能始终访问或修改命令行,例如在嵌入式 VM 或仅在脚本深处启动的 VM 中,因此提供了 JAVA_TOOL_OPTIONS 变量,以便在这些情况下可以启动代理。
...
示例脚本
这是我用来解决这个问题的代码。控制台输出包含为 cmets:
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 9+ 开始,
JDK_JAVA_OPTIONS作为首选替代品,请参阅stackoverflow.com/q/52986487/537554
标签: java jvm jvm-arguments