我认为在_JAVA_OPTIONSJAVA_TOOL_OPTIONS之间进行比较会很棒。
我一直在寻找一个,但是什么也找不到,所以希望我们可以在Stackoverflow上找到相关知识。

为了完整起见,添加了JAVA_OPTS。它不是JVM的一部分,但是有很多关于它的问题。

我知道的:

到目前为止,我发现:

  • JAVA_OPTS 不是由JDK使用,而是由许多其他应用程序使用(请参阅this post)。
  • JAVA_TOOL_OPTIONS _JAVA_OPTIONS 是将JVM参数指定为环境变量而不是命令行参数的方法。
  • 至少由javajavac拾取
  • 它们具有以下优先级:
  • _JAVA_OPTIONS(覆盖其他代码)
  • 命令行参数
  • 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 并没有太多说明区别:



    示例脚本

    这是我用来弄清楚这一点的代码。控制台输出作为注释包括在内:
    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进程中的这些选项外,您几乎已经注意到了。

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

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

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

    09-15 22:36