我认为在_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上可以包含的任何限制
官方文件
Since the command-line cannot always be accessed or modified, for example in embedded VMs or simply VMs launched deep within scripts, a JAVA_TOOL_OPTIONS variable is provided so that agents may be launched in these cases.
…
示例脚本
这是我用来解决这个问题的代码。控制台输出包括在注释中:
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