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