RFR: 8297914: Remove java_lang_Class::process_archived_mirror()
Ioi Lam
iklam at openjdk.org
Wed Jan 4 21:08:44 UTC 2023
This is another prerequisite for [JDK-8296344](https://bugs.openjdk.org/browse/JDK-8296344).
Before this PR, when archiving mirror objects (i.e., instances of `java.lang.Class`):
- We first allocate a copy of the mirror inside a safepoint.
- We then reinitialize the contents of the copy to the desired state (so that it can be used by `Klass::restore_unshareable_info()`
This copy-and-modify operation inside the safepoint makes it difficult to implement [JDK-8296344](https://bugs.openjdk.org/browse/JDK-8296344). It violates the requirements [1] and [2] as stated in [JDK-8298600](https://bugs.openjdk.org/browse/JDK-8298600). Also, the reinitialization code is complicated.
After this PR:
- During the creation of each regular mirror object, we allocate a "scratch mirror" object, which has the states as expected by `Klass::restore_unshareable_info()`. See `java_lang_Class::create_scratch_mirror()`.
- When the archive heap is dumped inside a safepoint, we use the scratch mirror, so we can avoid the copy-and-modify operation. See `HeapShared::archive_java_mirrors()`.
Testing: tiers 1-4
-------------
Commit messages:
- refactored KlassToOopHandleTable
- refactor java_lang_Class::allocate_mirror (step2)
- refactor java_lang_Class::allocate_mirror (step1)
- 8297914: Remove java_lang_Class::process_archived_mirror()
Changes: https://git.openjdk.org/jdk/pull/11853/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11853&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8297914
Stats: 511 lines in 12 files changed: 227 ins; 226 del; 58 mod
Patch: https://git.openjdk.org/jdk/pull/11853.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/11853/head:pull/11853
PR: https://git.openjdk.org/jdk/pull/11853
More information about the hotspot-dev
mailing list