> This PR loads the classes for the boot/platform/app loaders with > `AOTLinkedClassBulkLoader::preload_classes()`. This happens at the very > beginning of `vmClasses::resolve_all()`, before any Java code is executed. > > - We essentially iterate over all the classes inside the > `AOTLinkedClassTable` and adds them into the system dictionary using the new > method `SystemDictionary::preload_class()`. > - `SystemDictionary::preload_class(..., k)` is lightweight because it's > called in a single thread after all super types of `k` have been loaded. So > most of the complicated work (such as place holders, circularity detection, > etc) in `SystemDictionary::resolve_or_null(..., k)` can be skipped. We also > don't need to call into `ClassLoader::load_class()` as the boot/platform/app > loaders are well-behaved. > - In the assembly phase, we record the mirror, package, protection domain, > code source, etc, of these classes. So there's no need to programmatically > create them in the production run. See `HeapShared::copy_java_mirror()` and > also changes in ClassLoader.java and SecureClassLoader.java.
Ioi Lam has updated the pull request incrementally with one additional commit since the last revision: @DanHeidinga comment -- assembly phase should check if URLStreamHandler might be overridden in the production run ------------- Changes: - all: https://git.openjdk.org/jdk/pull/26375/files - new: https://git.openjdk.org/jdk/pull/26375/files/b7a191d8..ecc2581d Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=26375&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=26375&range=01-02 Stats: 117 lines in 3 files changed: 117 ins; 0 del; 0 mod Patch: https://git.openjdk.org/jdk/pull/26375.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/26375/head:pull/26375 PR: https://git.openjdk.org/jdk/pull/26375