Question about system properties and version strings
Alan Bateman
Alan.Bateman at oracle.com
Wed Apr 15 12:49:42 UTC 2015
On 15/04/2015 13:37, Magnus Ihse Bursie wrote:
> When this simple program is run:
>
> public class TestSystemVersion {
> public static void main(String[] args) {
> System.out.println("1. java.version: " +
> System.getProperty("java.version"));
> System.out.println("1. java.runtime.version: " +
> System.getProperty("java.runtime.version"));
> System.setProperties(null);
> System.out.println("2. java.version: " +
> System.getProperty("java.version"));
> System.out.println("2. java.runtime.version: " +
> System.getProperty("java.runtime.version"));
> }
> }
>
> The output is:
> 1. java.version: 1.9.0-internal
> 1. java.runtime.version: 1.9.0-internal-magnusi_2015_04_02_09_24-b00
> 2. java.version: 1.9.0-internal
> 2. java.runtime.version: null
>
> Is this really expected? I find it surprising. I'd have thought that
> either *both* strings would have been reset, or none.
>
> This behavior stems from the fact that System.setProperties(), when
> given a null argument, calls initProperties. This is a native method
> which sets java.version, but not java.runtime.version. However, at
> system startup, initializeSystemClass() will be called, which apart
> from initProperties also calls a bunch of other methods to set up
> initial system properties, for instance sun.misc.Version.init(), which
> will re-set java.version (even though it is already set at this
> point), and also set java.runtime.version.
At one point then Mike Duigou was looking into this via JDK-8022854 but
I don't think it was ever completed.
-Alan
More information about the core-libs-dev
mailing list