< prev index next >

src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java

Print this page

@@ -102,12 +102,15 @@
 
     // parent ClassLoader
     private final BuiltinClassLoader parent;
 
     // the URL class path, or null if there is no class path
-    private final URLClassPath ucp;
+    private @Stable URLClassPath ucp;
 
+    void setClassPath(URLClassPath ucp) {
+        this.ucp = ucp;
+    }
 
     /**
      * A module defined/loaded by a built-in class loader.
      *
      * A LoadedModule encapsulates a ModuleReference along with its CodeSource

@@ -154,14 +157,26 @@
             }
             return url;
         }
     }
 
+    static class ArchivedData {
+        static Map<String, LoadedModule> packageToModule;
+    }
 
     // maps package name to loaded module for modules in the boot layer
-    private static final Map<String, LoadedModule> packageToModule
-        = new ConcurrentHashMap<>(1024);
+    private static final Map<String, LoadedModule> packageToModule;
+
+    static {
+        VM.initializeFromArchive(ArchivedData.class);
+        if (ArchivedData.packageToModule != null) {
+            packageToModule = ArchivedData.packageToModule;
+        } else {
+            packageToModule = new ConcurrentHashMap<>(1024);
+            ArchivedData.packageToModule = packageToModule;
+        }
+    }
 
     // maps a module name to a module reference
     private final Map<String, ModuleReference> nameToModule;
 
     // maps a module reference to a module reader

@@ -1040,6 +1055,11 @@
      * checking with java.net.URLClassLoader.
      */
     private static URL checkURL(URL url) {
         return URLClassPath.checkURL(url);
     }
+
+    // Called from VM only, during -Xshare:dump
+    private void resetArchivedStates() {
+        ucp = null;
+    }
 }
< prev index next >