我觉得比较_JAVA_OPTIONSJAVA_TOOL_OPTIONS会很好.

包含JAVA_OPTS是为了完整.它不是JVM的一部分,但是有很多关于它的问题.

我知道:

到目前为止,我发现:

  • 101不是JDK使用的,而是许多其他应用程序使用的(参见this post).
  • JAVA_TOOL_OPTIONS and _JAVA_OPTIONS are ways to specify JVM arguments as an environment variable instead of command line parameters.
    • 至少有java人和javac人被逮捕
    • They have this precedence:
      1. _JAVA_OPTIONS(覆盖其他内容)
      2. 命令行参数
      3. JAVA_TOOL_OPTIONS(被其他文件覆盖)

我想知道的是

  • 是否有官方文件将JAVA_TOOL_OPTIONS_JAVA_OPTIONS进行比较
  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS之间是否有其他差异(优先顺序除外).
  • 哪些可执行文件拾取JAVA_TOOL_OPTIONS_JAVA_OPTIONS(除了javajavac之外)
  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS上可以包含的内容有任何限制

官方文件

我还没有找到任何关于_JAVA_OPTIONS的文件.The documentation for JAVA_TOOL_OPTIONS并不能说明其中的区别:

由于命令行不能总是被访问或修改,例如在嵌入式虚拟机中,或只是在脚本深处启动的虚拟机中,因此提供了一个JAVA_TOOL_OPTIONS变量,以便在这些情况下启动代理
...

Example script

这是我用来解决这个问题的代码.控制台输出包含在注释中:

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进程内也会 Select 这些选项之外,您基本上已经解决了这个问题.

_JAVA_OPTIONS没有文档的事实表明不推荐使用这个变量,我实际上看到人们通过在~/.bashrc中设置它来滥用它.但是,如果您想要弄清此问题的根源,您可以判断Oracle HotSpot VM的来源(例如in OpenJDK7).

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

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

Java相关问答推荐

将偶数元素移动到数组的前面,同时保持相对顺序

Java取消任务运行Oracle查询通过JDBC—连接中断,因为SQLSTATE(08006),错误代码(17002)IO错误:套接字读取中断

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

我找不到&Quot;配置&的位置

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

编译多个.Java文件并运行一个依赖于用户参数的文件

在运行MVN测试时,为什么构建失败,并显示了java.lang.ClassNotFoundException:java.net.http.HttpResponse?

JavaFX如何在MeshView中修复多个立方体?

Java流传输一个列表并创建单个对象

更新AWS凭据

如何在代码中将行呈现在矩形前面?

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

Java中不兼容的泛型类型

Android Java:已设置但未读取SharedPreferences

从映射列表中检索所有键

如何在运行docker的应用程序中获取指定的配置文件

放置在变量中的Java成员引用不相等

如何使用Jackson读取以方括号开头的JSON?

元音变音字符:如何在 Java 中将Á<0x9c>转换为Ü?

语句打印在错误的行(Java Token 问题)