--- old/src/java.base/share/classes/java/lang/Module.java 2020-08-12 15:01:03.700787134 -0700 +++ new/src/java.base/share/classes/java/lang/Module.java 2020-08-12 15:01:03.404775992 -0700 @@ -55,6 +55,7 @@ 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 @@ // -- // special Module to mean "all unnamed modules" - private static final Module ALL_UNNAMED_MODULE = new Module(null); - private static final Set ALL_UNNAMED_MODULE_SET = Set.of(ALL_UNNAMED_MODULE); + private static final Module ALL_UNNAMED_MODULE; + private static final Set ALL_UNNAMED_MODULE_SET; // special Module to mean "everyone" - private static final Module EVERYONE_MODULE = new Module(null); - private static final Set EVERYONE_SET = Set.of(EVERYONE_MODULE); + private static final Module EVERYONE_MODULE; + private static final Set EVERYONE_SET; + + private static class ArchivedData { + private static ArchivedData archivedData; + private final Module allUnnamedModule; + private final Set allUnnamedModules; + private final Module everyoneModule; + private final Set 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