< prev index next >
src/java.base/share/classes/jdk/internal/loader/BuiltinClassLoader.java
Print this page
@@ -104,14 +104,10 @@
private final BuiltinClassLoader parent;
// the URL class path, or null if there is no class path
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
* URL to avoid needing to create this URL when defining classes.
@@ -157,27 +153,31 @@
}
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;
-
static {
- VM.initializeFromArchive(ArchivedData.class);
- if (ArchivedData.packageToModule != null) {
- packageToModule = ArchivedData.packageToModule;
+ ArchivedClassLoaders archivedClassLoaders = ArchivedClassLoaders.get();
+ if (archivedClassLoaders != null) {
+ @SuppressWarnings("unchecked")
+ Map<String, LoadedModule> map
+ = (Map<String, LoadedModule>) archivedClassLoaders.packageToModule();
+ packageToModule = map;
} else {
packageToModule = new ConcurrentHashMap<>(1024);
- ArchivedData.packageToModule = packageToModule;
}
}
+ /**
+ * Invoked by ArchivedClassLoaders to archive the package-to-module map.
+ */
+ static Map<String, ?> packageToModule() {
+ return packageToModule;
+ }
+
// maps a module name to a module reference
private final Map<String, ModuleReference> nameToModule;
// maps a module reference to a module reader
private final Map<ModuleReference, ModuleReader> moduleToReader;
@@ -199,10 +199,25 @@
this.nameToModule = new ConcurrentHashMap<>(32);
this.moduleToReader = new ConcurrentHashMap<>();
}
/**
+ * Appends to the given file path to the class path.
+ */
+ void appendClassPath(String path) {
+ // assert ucp != null;
+ ucp.addFile(path);
+ }
+
+ /**
+ * Sets the class path, called to reset the class path during -Xshare:dump
+ */
+ void setClassPath(URLClassPath ucp) {
+ this.ucp = ucp;
+ }
+
+ /**
* Returns {@code true} if there is a class path associated with this
* class loader.
*/
boolean hasClassPath() {
return ucp != null;
< prev index next >