【问题标题】:What is the difference between these Java environment variables?这些Java环境变量有什么区别?
【发布时间】:2014-09-22 01:32:02
【问题描述】:

Java 环境变量_JAVA_OPTIONSJAVA_OPTIONS_JAVA_TOOLS_OPTIONSJAVA_TOOLS_OPTIONS_JAVA_OPTSJAVA_OPTS 有什么区别?每个人应该在什么时候使用?这些是所有 JVM 规范的标准部分,还是仅适用于 Oracle 的 JVM?

【问题讨论】:

  • 我从不使用它们中的任何一个,而且我不知道它们中的任何一个都适用于 Oracle JVM。我已经看到其中一些在 Tomcat 启动脚本中使用。您需要向我们披露您遇到这些事情的背景。

标签: java command-line configuration jvm environment


【解决方案1】:

JAVA_TOOLS_OPTIONS是所有sun JVM的唯一标准部分,IBM jdk的某些版本也会读取它,但非sun jdk的某些版本可以忽略它。

其他变量可以被很多shell脚本读取,例如tomcat,maven。但这不是标准方式。

所以唯一的标准方法是在命令行中指定选项,使用shell脚本是广泛使用的方式。

【讨论】:

    【解决方案2】:

    万一其他人因为谷歌搜索而被困在这个旧帖子上......

    来自 OpenJDK 中的评论 source code, as of Java 11

     * @implNote
     * The HotSpot JVM processes the input arguments from multiple sources
     * in the following order:
     * 1. JAVA_TOOL_OPTIONS environment variable
     * 2. Options from JNI Invocation API
     * 3. _JAVA_OPTIONS environment variable
     *
     * If VM options file is specified via -XX:VMOptionsFile, the vm options
     * file is read and expanded in place of -XX:VMOptionFile option.
    

    来自matching unit tests的评论

         * Here is the order of options processing and last argument wins:
         *    1) Flags file
         *    2) JAVA_TOOL_OPTIONS environment variables
         *    3) Pseudo command line from launcher
         *    4) _JAVA_OPTIONS
         * In every category arguments processed from left to right and from up to down
         * and the last processed arguments wins, i.e. if argument is defined several
         * times the value of argument will be equal to the last processed argument.
    

    请注意,在该测试中,“标志文件”是通过-XX:VMOptionsFile= 在命令行上传递的。
    另请注意,“伪命令行”中的 pseudo 限定符是指单元测试生成命令行的方式;对于正在测试的 JVM,它们与 实际 命令行选项没有什么不同。

    在该 repo 的其他地方暗示 _JAVA_OPTIONS 是为了测试/调试目的而引入的。


    底线:如果您是负责在 OpenJDK 之上运行的罐装 Java 应用程序的 Ops,并且需要设置/覆盖一些 Java 属性,但不能通过命令行或应用程序级 env 执行此操作var (例如 CATALINA_OPTSJAVA_OPTS 用于 Tomcat) ...然后作为最后的手段

    • 要注入新属性,请使用 env var JAVA_TOOL_OPTIONS
    • 要覆盖预设应用内部设置的属性,请改用_JAVA_OPTIONS

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2012-05-12
      • 2017-01-19
      • 2011-02-21
      相关资源
      最近更新 更多