_JAVA_OPTIONS我认为在和之间进行比较会很棒JAVA_TOOL_OPTIONS。我一直在寻找一个,但我找不到任何东西,所以我希望我们能在 Stackoverflow 上找到知识。
_JAVA_OPTIONS
JAVA_TOOL_OPTIONS
JAVA_OPTS包括在内是为了完整性。它不是 JVM 的一部分,但有很多关于它的问题。
JAVA_OPTS
到目前为止,我发现:
java
javac
我还没有找到任何关于_JAVA_OPTIONS. 的文档JAVA_TOOL_OPTIONS并没有说明差异:
由于命令行不能总是被访问或修改,例如在嵌入式虚拟机或简单地在脚本中启动的虚拟机中,提供了一个 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 的来源(例如在 OpenJDK7 中)。
~/.bashrc
您还应该记住,不能保证其他 VM 已经或将继续支持未记录的变量。
2015-08-04 更新: 为了为来自搜索引擎的人们节省五分钟,_JAVA_OPTIONS胜过命令行参数,而命令行参数又胜过JAVA_TOOL_OPTIONS.