首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >_JAVA_OPTIONS、JAVA_TOOL_OPTIONS和JAVA_OPTS的区别

_JAVA_OPTIONS、JAVA_TOOL_OPTIONS和JAVA_OPTS的区别
EN

Stack Overflow用户
提问于 2015-02-05 01:26:54
回答 3查看 99.5K关注 0票数 193

我认为在_JAVA_OPTIONSJAVA_TOOL_OPTIONS之间做一个比较是很棒的。我一直在寻找一个,但我没有找到任何东西,所以我希望我们能在Stackoverflow上找到知识。

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

我所知道的:

到目前为止,我发现:

JVM不是由JDK使用的,而是由许多其他应用程序使用的(请参阅this post).

  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS是将
  • JAVA_OPTS参数指定为环境变量而不是命令行参数的方法)。
    1. _JAVA_OPTIONS (覆盖others)
    2. Command行parameters
    3. JAVA_TOOL_OPTIONS (被others)

覆盖))

  • 至少由java选取,并且具有以下优先级

我想知道的是

  • 是否有任何官方文档对JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • Are进行了比较JAVA_TOOL_OPTIONS_JAVA_OPTIONS之间是否存在其他差异(除了javac)
  • Any可执行文件pick JAVA_TOOL_OPTIONS_JAVA_OPTIONS之外(除了javaJAVA_TOOL_OPTIONS上可以包含的内容的限制

官方文档

我找不到任何关于_JAVA_OPTIONS的文档。The documentation for JAVA_TOOL_OPTIONS没有详细说明其中的区别:

由于并非总是可以访问或修改命令行,例如在嵌入式VM中,或者只是在脚本内部启动的VM中,因此提供了一个JAVA_TOOL_OPTIONS变量,以便在这些情况下可以启动代理。

..。

示例脚本

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

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-18 22:15:26

您已经很好地解决了这个问题,只是即使您通过库调用启动JVM in-process,这些选项也会被选中。

没有记录_JAVA_OPTIONS的事实表明不建议使用这个变量,我实际上看到人们通过在~/.bashrc中设置它来滥用它。但是,如果您想要了解此问题的根源,您可以检查Oracle HotSpot VM的源代码(例如in OpenJDK7)。

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

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

票数 83
EN

Stack Overflow用户

发布于 2015-11-06 06:58:29

还有一个区别:_JAVA_OPTIONS是特定于甲骨文的。IBM使用的是IBM_JAVA_OPTIONS。这样做可能是为了能够定义特定于计算机的选项,而不会发生冲突。所有虚拟机都能识别JAVA_TOOL_OPTIONS

票数 52
EN

Stack Overflow用户

发布于 2016-11-22 16:17:45

JAVA_OPTS在JVM中完全有no special handling

根据https://bugs.openjdk.java.net/browse/JDK-4971166的说法,JAVA_TOOL_OPTIONS包含在标准的JVMTI规范中,可以更好地处理带引号的空格,应该始终优先使用,而不是没有文档记录的特定于热点的_JAVA_OPTIONS

还要注意,使用这些prints additional message to stdout that can't be suppressed

正如@ryenus所指出的,自从JDK 9+以来,有JDK_JAVA_OPTIONS作为首选的替代方案,请参阅What is the difference between JDK_JAVA_OPTIONS and JAVA_TOOL_OPTIONS when using Java 11?

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28327620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档