_JAVA_OPTIONS, JAVA_TOOL_OPTIONS, and JAVA_OPTS are all environment variables used in Java applications to set additional options and parameters for the Java Virtual Machine (JVM) during runtime. _JAVA_OPTIONS is an environment variable that allows users

5 浏览
0 Comments

_JAVA_OPTIONS, JAVA_TOOL_OPTIONS, and JAVA_OPTS are all environment variables used in Java applications to set additional options and parameters for the Java Virtual Machine (JVM) during runtime. _JAVA_OPTIONS is an environment variable that allows users

我认为对_JAVA_OPTIONSJAVA_TOOL_OPTIONS进行比较是很好的。\n我已经搜索了一些内容,但是没有找到任何东西,所以希望我们能在Stackoverflow上找到答案。\n为了完整起见,JAVA_OPTS也包括在内。它不是JVM的一部分,但在外界有很多关于它的问题。\n

我所了解的:

\n到目前为止,我已经发现:\n

    \n

  • JAVA_OPTS不被JDK使用,而是被一些其他应用程序使用(见此帖子)。
  • \n

  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS是用环境变量而不是命令行参数来指定JVM参数的方法。\n
      \n

    • 至少有javajavac支持
    • \n

    • 它们的优先级如下:\n
        \n

      1. _JAVA_OPTIONS(覆盖其他选项)
      2. \n

      3. 命令行参数
      4. \n

      5. JAVA_TOOL_OPTIONS(被其他选项覆盖)
      6. \n

    • \n

  • \n

\n

我想知道的:

\n

    \n

  • 是否有任何官方文档比较了JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • \n

  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS之间是否有其他差异(除了优先级)。
  • \n

  • 除了javajavac之外,哪些可执行程序支持JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • \n

  • JAVA_TOOL_OPTIONS_JAVA_OPTIONS中是否存在任何限制
  • \n

\n

官方文档

\n我没有找到任何关于_JAVA_OPTIONS的文档。JAVA_TOOL_OPTIONS的文档没有提供太多关于差异的信息:\n

\n由于无法始终访问或修改命令行,例如在嵌入式VM或在脚本中启动的VM中,提供了一个JAVA_TOOL_OPTIONS变量,以便在这些情况下启动代理。
...\n

\n

示例脚本

\n这是我用来弄清楚这个问题的代码。控制台输出作为注释包含在内:\n

export JAVA_OPTS=foobar
export JAVA_TOOL_OPTIONS= 
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
java -version                          
# 检测到JAVA_TOOL_OPTIONS: 
# 检测到_JAVA_OPTIONS:-Xmx512m -Xms64m
# java版本 "1.7.0_40"
OpenJDK运行时环境(IcedTea 2.4.1)(suse-3.41.1-x86_64)
OpenJDK 64位服务器VM(build 24.0-b50, 混合模式)
javac -version
# 检测到JAVA_TOOL_OPTIONS: 
# 检测到_JAVA_OPTIONS:-Xmx512m -Xms64m
# javac版本 1.7.0_40
export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1"
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
javac -version
# 检测到JAVA_TOOL_OPTIONS:-Xmx1 -Xms1
# 检测到_JAVA_OPTIONS:-Xmx512m -Xms64m
# javac版本 1.7.0_40
export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m"
export _JAVA_OPTIONS="-Xmx1 -Xms1"
javac -version
# 检测到JAVA_TOOL_OPTIONS:-Xmx512m -Xms64m
# 检测到_JAVA_OPTIONS:-Xmx1 -Xms1
# VM初始化时出错
# 初始堆太小
export JAVA_TOOL_OPTIONS="-Xmx1 -Xms1"
export _JAVA_OPTIONS=
java -Xmx512m -Xms64m -version
# 检测到JAVA_TOOL_OPTIONS:-Xmx1 -Xms1
# 检测到_JAVA_OPTIONS: 
# java版本 "1.7.0_40"
# OpenJDK运行时环境(IcedTea 2.4.1)(suse-3.41.1-x86_64)
# OpenJDK 64位服务器VM(build 24.0-b50, 混合模式)
export JAVA_TOOL_OPTIONS=
export _JAVA_OPTIONS="-Xmx1 -Xms1"
java -Xmx512m -Xms64m -version
# 检测到JAVA_TOOL_OPTIONS: 
# 检测到_JAVA_OPTIONS:-Xmx1 -Xms1
# VM初始化时出错
# 初始堆太小

0
0 Comments

在Java中,有三个环境变量可以用于配置Java虚拟机(JVM)的选项,它们分别是_JAVA_OPTIONS、JAVA_TOOL_OPTIONS和JAVA_OPTS。但是,这三个选项之间存在一些区别和使用注意事项。

首先,JAVA_OPTS在JVM中没有特殊处理。这意味着,无论我们如何设置JAVA_OPTS环境变量,JVM都不会对其进行识别和处理。因此,我们不能依赖JAVA_OPTS来配置JVM选项。

而JAVA_TOOL_OPTIONS则是在标准的JVMTI规范中被包含的选项,它对带引号的空格有更好的处理方式,并且应该始终优先使用它,而不是未记录的Hotspot特定选项_JAVA_OPTIONS。这意味着,如果我们想要配置JVM选项,最好使用JAVA_TOOL_OPTIONS而不是_JAVA_OPTIONS。

另外需要注意的是,使用这些选项会在标准输出中打印额外的消息,无法通过任何手段来抑制这些消息的输出。

从JDK 9开始,出现了JDK_JAVA_OPTIONS环境变量,它被推荐作为_JAVA_OPTIONS的替代品。因此,在JDK 9及以上版本中,我们应该使用JDK_JAVA_OPTIONS来配置JVM选项,而不是_JAVA_OPTIONS。

我们在配置JVM选项时需要注意以上区别和使用注意事项,尽量使用JAVA_TOOL_OPTIONS或JDK_JAVA_OPTIONS来代替_JAVA_OPTIONS和JAVA_OPTS,以确保选项能够正确被JVM识别和处理。

0
0 Comments

问题的出现原因是为了能够定义特定于机器的选项而没有冲突。解决方法是使用不同的选项,如_JAVA_OPTIONSIBM_JAVA_OPTIONS

0
0 Comments

在Java中,有三个环境变量可以用来设置JVM的选项:_JAVA_OPTIONS、JAVA_TOOL_OPTIONS和JAVA_OPTS。然而,这三个变量之间的差异并不清楚,因此我们需要对这个问题进行整理和解答。

首先,_JAVA_OPTIONS是一个不被官方文档所记录的变量,这意味着它并不被推荐使用。然而,一些人仍然滥用这个变量,将其设置在他们的.bashrc文件中。如果我们想要深入了解这个问题,可以查看Oracle HotSpot VM的源代码。

其次,JAVA_TOOL_OPTIONS是另一个可以用来设置JVM选项的变量。与_JAVA_OPTIONS不同的是,它是被官方记录的,并且有一些VM会支持它。

最后,JAVA_OPTS是一个常见的命名约定,用于设置JVM选项。它通常被用于启动脚本中,以传递额外的选项给JVM。

需要注意的是,这些选项在不同的情况下有不同的优先级。具体来说,_JAVA_OPTIONS优先于命令行参数,而命令行参数又优先于JAVA_TOOL_OPTIONS。

希望通过这篇文章能够帮助大家更好地理解_JAVA_OPTIONS、JAVA_TOOL_OPTIONS和JAVA_OPTS之间的区别,以及它们在设置JVM选项时的优先级关系。同时也提醒大家,由于_JAVA_OPTIONS并不被推荐使用且没有官方文档记录,因此在实际应用中应尽量避免使用该变量。

0