mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8244778: Archive full module graph in CDS
Reviewed-by: erikj, coleenp, lfoltan, redestad, alanb, mchung
This commit is contained in:
parent
998ce78e53
commit
03a4df0acd
59 changed files with 2052 additions and 164 deletions
|
@ -2714,6 +2714,17 @@ public abstract class ClassLoader {
|
|||
offset = unsafe.objectFieldOffset(k, name);
|
||||
return unsafe.compareAndSetReference(this, offset, null, obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the VM, during -Xshare:dump
|
||||
*/
|
||||
private void resetArchivedStates() {
|
||||
parallelLockMap.clear();
|
||||
packages.clear();
|
||||
package2certs.clear();
|
||||
classes.clear();
|
||||
classLoaderValueMap = null;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -55,6 +55,7 @@ import java.util.stream.Stream;
|
|||
import jdk.internal.loader.BuiltinClassLoader;
|
||||
import jdk.internal.loader.BootLoader;
|
||||
import jdk.internal.loader.ClassLoaders;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.module.IllegalAccessLogger;
|
||||
import jdk.internal.module.ModuleLoaderMap;
|
||||
import jdk.internal.module.ServicesCatalog;
|
||||
|
@ -246,12 +247,55 @@ public final class Module implements AnnotatedElement {
|
|||
// --
|
||||
|
||||
// special Module to mean "all unnamed modules"
|
||||
private static final Module ALL_UNNAMED_MODULE = new Module(null);
|
||||
private static final Set<Module> ALL_UNNAMED_MODULE_SET = Set.of(ALL_UNNAMED_MODULE);
|
||||
private static final Module ALL_UNNAMED_MODULE;
|
||||
private static final Set<Module> ALL_UNNAMED_MODULE_SET;
|
||||
|
||||
// special Module to mean "everyone"
|
||||
private static final Module EVERYONE_MODULE = new Module(null);
|
||||
private static final Set<Module> EVERYONE_SET = Set.of(EVERYONE_MODULE);
|
||||
private static final Module EVERYONE_MODULE;
|
||||
private static final Set<Module> EVERYONE_SET;
|
||||
|
||||
private static class ArchivedData {
|
||||
private static ArchivedData archivedData;
|
||||
private final Module allUnnamedModule;
|
||||
private final Set<Module> allUnnamedModules;
|
||||
private final Module everyoneModule;
|
||||
private final Set<Module> everyoneSet;
|
||||
|
||||
private ArchivedData() {
|
||||
this.allUnnamedModule = ALL_UNNAMED_MODULE;
|
||||
this.allUnnamedModules = ALL_UNNAMED_MODULE_SET;
|
||||
this.everyoneModule = EVERYONE_MODULE;
|
||||
this.everyoneSet = EVERYONE_SET;
|
||||
}
|
||||
|
||||
static void archive() {
|
||||
archivedData = new ArchivedData();
|
||||
}
|
||||
|
||||
static ArchivedData get() {
|
||||
return archivedData;
|
||||
}
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ArchivedData.class);
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
ArchivedData archivedData = ArchivedData.get();
|
||||
if (archivedData != null) {
|
||||
ALL_UNNAMED_MODULE = archivedData.allUnnamedModule;
|
||||
ALL_UNNAMED_MODULE_SET = archivedData.allUnnamedModules;
|
||||
EVERYONE_MODULE = archivedData.everyoneModule;
|
||||
EVERYONE_SET = archivedData.everyoneSet;
|
||||
} else {
|
||||
ALL_UNNAMED_MODULE = new Module(null);
|
||||
ALL_UNNAMED_MODULE_SET = Set.of(ALL_UNNAMED_MODULE);
|
||||
EVERYONE_MODULE = new Module(null);
|
||||
EVERYONE_SET = Set.of(EVERYONE_MODULE);
|
||||
ArchivedData.archive();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The holder of data structures to support readability, exports, and
|
||||
|
|
|
@ -2248,6 +2248,9 @@ public final class System {
|
|||
public ServicesCatalog getServicesCatalog(ModuleLayer layer) {
|
||||
return layer.getServicesCatalog();
|
||||
}
|
||||
public void bindToLoader(ModuleLayer layer, ClassLoader loader) {
|
||||
layer.bindToLoader(loader);
|
||||
}
|
||||
public Stream<ModuleLayer> layers(ModuleLayer layer) {
|
||||
return layer.layers();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue