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.

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

Commit messages:
 - 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
 - Fixed arm build
 - Merge branch 'master' into 8350550-preload-aot-classes-during-vm-bootstrap
 - clean up
 - java.net.URL class needs runtimeSetup
 - fixed build
 - ... and 5 more: https://git.openjdk.org/jdk/compare/25480f00...15746239

Changes: https://git.openjdk.org/jdk/pull/26375/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26375&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8350550
  Stats: 553 lines in 39 files changed: 441 ins; 13 del; 99 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