Java 系统环境变量

Posted

技术标签:

【中文标题】Java 系统环境变量【英文标题】:Java System Environment Variable 【发布时间】:2012-03-29 11:01:12 【问题描述】:

Java 是否有一个默认的系统环境变量,当我们设置它时总是会被读取/附加? CATALINA_OTPS/JAVA_OPTS 等似乎只适用于 TOMCAT/JBOSS 等。

    我不想通过 Java 系统属性(通过 -Dprop1=value1 -Dprop2=value2 传入)设置它,因为它涉及 shell/batch 脚本。 它应该可以跨操作系统工作,就像在 Windows 中双击 jar 文件一样。 它应该适用于不同的 JRE(Sun、IBM、OpenJDK 等)。 不应涉及额外的编码。 它应该可以在大多数库配置文件中使用,例如设置 log4j 级别 $LOG_LEVEL。

更新:添加了第 4 项和第 5 项。从标题中删除 OS 以使我的问题更清楚。

更新 2:看了 Perception 的回答后,我的第 2 和第 3 项似乎可以通过System.getenv 实现。第4、5项如何实现?

以下是场景示例: 现在想象一下,JAVA_DEFAULT_OPTS 是一个环境变量,Java 将读取它,因为它现在已成为标准。在开发台式机上,我设置了JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m;在生产服务器机器上,客户设置JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m。当我/用户在 Windows 上双击 jar 文件时,应用程序将以不同的 log4j 级别和最大内存堆大小运行。

【问题讨论】:

【参考方案1】:

有一个特殊的环境变量_JAVA_OPTIONS,它的值会被JVM(java.exe)获取。

在 Windows 中:

set _JAVA_OPTIONS=-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd

在 Linux 中:

export _JAVA_OPTIONS='-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd'

对于 Java Web Start,它是 JAVAWS_VM_ARGS。对于 javaw.exe (Applet),它是 _JPI_VM_OPTIONS


编辑 20201213

_JAVA_OPTIONS 环境变量没问题,但没有记录或支持。

由于没有标准化,其他供应商都有自己的名称,例如IBM_JAVA_OPTIONS。按照惯例,前导下划线名称是私有的,因此标准化 _JAVA_OPTIONS 的使用并不是一个好主意。

这就是为什么 JAVA_TOOL_OPTIONS 应该是首选。

参考:https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#tooloptions

【讨论】:

它有效。至少在带有 Sun JRE 的 Windows 中。 Linux 应该也能正常工作 (***.com/a/1508684/418439)。任何人都让我知道Mac是否也可以工作。这是复活节彩蛋吗?它甚至没有在docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html 正式记录。几年前我应该问这个...... :( @CKLee ,您可以在 Java 2D 文档docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html 和 docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/… 中找到它的提及【参考方案2】:

Java 有一个标准的 OS 系统环境变量,它总是在 JVM 启动时设置:

操作系统名称 os.arch os.version

所有可通过 'System.getProperty(propertyName)` 访问

如果您需要更多信息,您可以随时使用Management API。

【讨论】:

您是指 Java 管理扩展 (JMX) API 吗?如何在没有额外编码的情况下做到这一点? 包含一个指向 Management API 的链接。不确定您所说的“额外编码”是什么意思,您必须至少编写一两行代码才能访问所需的信息。

以上是关于Java 系统环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Java 环境变量配置

WIN7怎么配置环境变量JAVAHOME

java环境变量配置

linux系统设这了Java环境变量重启后,系统出问题。

Java 怎么设置环境变量

Java-环境变量