我认为在_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
并没有太多说明区别:示例脚本
这是我用来弄清楚这一点的代码。控制台输出作为注释包括在内:
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进程中的这些选项外,您几乎已经注意到了。
没有记录_JAVA_OPTIONS
的事实表明,不建议使用此变量,我实际上已经看到人们通过在其~/.bashrc
中设置它来滥用它。但是,如果您想深入了解此问题,则可以检查Oracle HotSpot VM的来源(例如in OpenJDK7)。
您还应该记住,不能保证其他VM会或将继续支持未记录的变量。
更新2015-08-04:为了为来自搜索引擎的人们节省五分钟,_JAVA_OPTIONS
胜过命令行参数,而命令行参数又胜过JAVA_TOOL_OPTIONS
。