< prev index next >

src/java.base/share/classes/java/lang/module/Configuration.java

Print this page

        

@@ -40,12 +40,14 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import jdk.internal.misc.VM;
 import jdk.internal.module.ModuleReferenceImpl;
 import jdk.internal.module.ModuleTarget;
+import jdk.internal.vm.annotation.Stable;
 
 /**
  * A configuration that is the result of <a href="package-summary.html#resolution">
  * resolution</a> or resolution with
  * <a href="{@docRoot}/java.base/java/lang/module/Configuration.html#service-binding">service binding</a>.

@@ -102,11 +104,21 @@
  * @see java.lang.ModuleLayer
  */
 public final class Configuration {
 
     // @see Configuration#empty()
-    private static final Configuration EMPTY_CONFIGURATION = new Configuration();
+    // EMPTY_CONFIGURATION may be initialized from the CDS archive.
+    private static @Stable Configuration EMPTY_CONFIGURATION;
+
+    static {
+        // Initialize EMPTY_CONFIGURATION from the archive.
+        VM.initializeFromArchive(Configuration.class);
+        // Create a new empty Configuration if there is no archived version.
+        if (EMPTY_CONFIGURATION == null) {
+            EMPTY_CONFIGURATION = new Configuration();
+        }
+    }
 
     // parent configurations, in search order
     private final List<Configuration> parents;
 
     private final Map<ResolvedModule, Set<ResolvedModule>> graph;
< prev index next >