Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8226810

Failed to launch JVM because of NullPointException occured on System.props

    Details

    • Subcomponent:
    • CPU:
      x86_64
    • OS:
      windows_10

      Description

      ADDITIONAL SYSTEM INFORMATION :
      OS: Windows10 1607 (internal version 14393.2430)
      Java: 12.0.1, extracted from the official release package jdk-12.0.1_windows-x64_bin.zip.

      A DESCRIPTION OF THE PROBLEM :
      Try to launch the JVM on windows10, with command line "java -version"; and it failed due to NullPointerException on java.base/java.lang.System.props, with the following stacks:

      Error occurred during initialization of VM
      java.lang.NullPointerException
              at java.lang.System.getProperty(java.base/System.java:848)
              at sun.security.action.GetPropertyAction.privilegedGetProperty(java.base/GetPropertyAction.java:105)
              at java.nio.charset.Charset.defaultCharset(java.base/Charset.java:607)
              at java.lang.StringCoding.decode(java.base/StringCoding.java:316)
              at java.lang.String.<init>(java.base/String.java:601)
              at java.lang.String.<init>(java.base/String.java:623)
              at jdk.internal.util.SystemProps$Raw.vmProperties(java.base/Native Method)
              at jdk.internal.util.SystemProps$Raw.cmdProperties(java.base/SystemProps.java:261)
              at jdk.internal.util.SystemProps.initProperties(java.base/SystemProps.java:55)
              at java.lang.System.initPhase1(java.base/System.java:1997)

      I've checked the source of System.java. It seems that the implementation is not accordant with the following comments:
          /**
           * Initialize the system class. Called after thread initialization.
           */
          private static void initPhase1() {
              // VM might invoke JNU_NewStringPlatform() to set those encoding
              // sensitive properties (user.home, user.name, boot.class.path, etc.)
              // during "props" initialization.
              // The charset is initialized in System.c and does not depend on the Properties.
              Map<String, String> tempProps = SystemProps.initProperties();
              VersionProps.init(tempProps);

              // There are certain system configurations that may be controlled by
              // VM options such as the maximum amount of direct memory and
              // Integer cache size used to support the object identity semantics
              // of autoboxing. Typically, the library will obtain these values
              // from the properties set by the VM. If the properties are for
              // internal implementation use only, these properties should be
              // masked from the system properties.
              //
              // Save a private copy of the system properties object that
              // can only be accessed by the internal implementation.
              VM.saveProperties(tempProps);
              props = createProperties(tempProps);
              ........

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      executing cmd: java -version

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      JVM launched, and show the correct version info.
      ACTUAL -
      NullPointException occured.

      FREQUENCY : always


        Attachments

          Activity

            People

            • Assignee:
              naoto Naoto Sato
              Reporter:
              webbuggrp Webbug Group
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated: