Java环境变量_JAVA_OPTIONS
,JAVA_OPTIONS
,_JAVA_TOOLS_OPTIONS
,JAVA_TOOLS_OPTIONS
,_JAVA_OPTS
和JAVA_OPTS
之间有什么区别?什么时候应该使用?这些是所有JVM规范的标准部分,还是仅适用于Oracle的JVM?
答案 0 :(得分:0)
JAVA_TOOLS_OPTIONS是所有sun JVM的唯一标准部分,某些版本的IBM jdk也会读取它,但某些版本的非sun jdk可能会忽略它。
许多shell脚本可以读取其他变量,例如tomcat,maven。但这不是一种标准方式。
所以唯一的标准方法是在命令行中指定选项,并且使用shell脚本是一种广泛使用的方式。
答案 1 :(得分:0)
万一其他人因为 Google 搜索而被困在这个旧帖子上...
来自 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.
的评论
* 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=
在命令行上传递的。
还要注意“伪命令行”中的伪限定符是指单元测试生成命令行的方式;对于正在测试的 JVM,它们与实际命令行选项没有区别。
该存储库的其他地方暗示 _JAVA_OPTIONS
是为了测试/调试目的而引入的。
底线:如果您是负责运行在 OpenJDK 之上的罐装 Java 应用程序的操作员,并且需要设置/覆盖某些 Java 属性,但不能通过命令行或应用程序级别的 env 执行此操作var (例如,Tomcat 的 CATALINA_OPTS
和 JAVA_OPTS
) ...然后作为最后的手段:
JAVA_TOOL_OPTIONS
_JAVA_OPTIONS