--- old/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java 2020-07-22 12:00:41.884188598 -0700 +++ new/src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java 2020-07-22 12:00:41.704181822 -0700 @@ -104,8 +104,11 @@ 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. @@ -156,10 +159,22 @@ } } + static class ArchivedData { + static Map packageToModule; + } // maps package name to loaded module for modules in the boot layer - private static final Map packageToModule - = new ConcurrentHashMap<>(1024); + private static final Map 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 nameToModule; @@ -1042,4 +1057,9 @@ private static URL checkURL(URL url) { return URLClassPath.checkURL(url); } + + // Called from VM only, during -Xshare:dump + private void resetArchivedStates() { + ucp = null; + } }