RFR: 8350550: Preload classes from AOT cache during VM bootstrap [v6]
Ioi Lam
iklam at openjdk.org
Thu Aug 28 21:17:42 UTC 2025
> 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 with a new target base due to a merge or a rebase. The pull request now contains 20 commits:
- Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
- @DanHeidinga comments -- added comments and asserts about the handling of enums
- @DanHeidinga comment - add test: user enum types are not initialized in assembly phase
- @DanHeidinga comment -- assembly phase should check if URLStreamHandler might be overridden in the production run
- @DanHeidinga comments
- tightened SystemDictionary::preload_class()
- Fixed bugs found in JCK
- added entry in ProblemList-AotJdk.txt due to 8323727
- more clean up
- Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
- ... and 10 more: https://git.openjdk.org/jdk/compare/075ddef8...1a8ea501
-------------
Changes: https://git.openjdk.org/jdk/pull/26375/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26375&range=05
Stats: 712 lines in 44 files changed: 597 ins; 13 del; 102 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
More information about the hotspot-dev
mailing list