Java System Environment Variable

environment-variables, java

Solution

There is a special environment variable called `_JAVA_OPTIONS`, its value will be picked up by the JVM (java.exe).

In Windows:

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

In Linux:

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

For Java Web Start it's `JAVAWS_VM_ARGS`. For javaw.exe (Applet), it's `_JPI_VM_OPTIONS`.

edit 20201213

`_JAVA_OPTIONS` environment variable was ok but was not documented or supported.

Since it is not standardized, other vendors have their own names e.g. `IBM_JAVA_OPTIONS`. Leading underscore names are private by convention so it's not a good idea to standardize the usage of `_JAVA_OPTIONS`.

That's why `JAVA_TOOL_OPTIONS` should be the preferred choice.

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

Problem

Does Java have a default System Environment Variable that will always be read/appended when we set it? `CATALINA_OTPS`/`JAVA_OPTS` etc seems only for TOMCAT/JBOSS etc. - I do not want to set it through Java system properties (which is passed in via -Dprop1=value1 -Dprop2=value2) as it involves shell/batch script. - It should work across OS, like double click jar file in Windows. - It should work across different JREs (Sun, IBM, OpenJDK etc). - It should not involve extra coding. - It should work in most libraries configuration file, like setting log4j level ${LOG_LEVEL}. Update: Added item # 4 and 5. Remove OS from title to make my question clearer. Update 2: After looking at Perception's answer, it seems like my item 2 and 3 can be achieved via `System.getenv`. How to achieve item 4 and 5? Here is example of scenario: Imagine now `JAVA_DEFAULT_OPTS` is an environment variable that will be read by Java as it has now become the standard. On development desktop machine, I set `JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m`; On production server machine, customers set `JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m`. When I/users double click the jar file on Windows, the application will run will different log4j level and max memory heap size.

Original source

Related problems