> 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 27 commits:

 - Removed JVMCI-specific checks that are no longer necessary with class 
preloading -- all CP entries discoverable by JVMCI will always point to 
already-loaded classes
 - Simplify implementation after JDK-8367366: Do not support 
-XX:+AOTClassLinking for dynamic CDS archive
 - Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
 - Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
 - @ashu-mehra comment: removed 
AOTLinkedClassBulkLoader::is_pending_aot_linked_class
 - @ashu-mehra review comments
 - Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
 - 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
 - ... and 17 more: https://git.openjdk.org/jdk/compare/91a97943...04cb7a64

-------------

Changes: https://git.openjdk.org/jdk/pull/26375/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26375&range=07
  Stats: 903 lines in 43 files changed: 498 ins; 212 del; 193 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

Reply via email to