小编典典

_JAVA_OPTIONS、JAVA_TOOL_OPTIONS 和 JAVA_OPTS 之间的区别

all

_JAVA_OPTIONS我认为在和之间进行比较会很棒JAVA_TOOL_OPTIONS。我一直在寻找一个,但我找不到任何东西,所以我希望我们能在
Stackoverflow 上找到知识。

JAVA_OPTS包括在内是为了完整性。它不是 JVM 的一部分,但有很多关于它的问题。

我知道的:

到目前为止,我发现:

  • JAVA_OPTS JDK 不使用,但许多其他应用程序使用(请参阅这篇文章)。
  • JAVA_TOOL_OPTIONS 并且 _JAVA_OPTIONS 是将 JVM 参数指定为环境变量而不是命令行参数的方法。
    • 至少javajavac
    • 它们具有以下优先级:
    • _JAVA_OPTIONS(覆盖其他)
    • 命令行参数
    • JAVA_TOOL_OPTIONS(被其他人覆盖)

我想知道的

  • 是否有任何官方文件比较JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • JAVA_TOOL_OPTIONS和之间是否还有其他区别_JAVA_OPTIONS(除了优先级)。
  • 哪些可执行文件拾取JAVA_TOOL_OPTIONSand _JAVA_OPTIONS(除了javaand javac
  • 对可以包含的内容的任何限制JAVA_TOOL_OPTIONS_JAVA_OPTIONS

官方文档

我还没有找到任何关于_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

阅读 65

收藏
2022-06-27

共1个答案

小编典典

您几乎已经掌握了它,除了即使您通过库调用在进程内启动 JVM 也会选择这些选项。

未记录的事实_JAVA_OPTIONS表明不建议使用此变量,我实际上已经看到人们通过将其设置在他们的~/.bashrc.
但是,如果您想深入了解这个问题,您可以查看 Oracle HotSpot VM 的来源(例如在 OpenJDK7
)。

您还应该记住,不能保证其他 VM 已经或将继续支持未记录的变量。

2015-08-04 更新:
为了为来自搜索引擎的人们节省五分钟,_JAVA_OPTIONS胜过命令行参数,而命令行参数又胜过JAVA_TOOL_OPTIONS.

2022-06-27