RFR: 8293291: Simplify relocation of native pointers in archive heap

Ioi Lam iklam at openjdk.org
Thu Sep 15 21:18:16 UTC 2022


Some objects in the archive heap contain native pointers. E.g., archived `java.lang.Class` objects contain a pointer to its `Klass*`.

At runtime, if the archived metadata are mapped at an alternative address, all of the `Klass*` pointers must be relocated. Instead of doing this in an ad-hoc way, this PR uses a bitmap, `FileMapRegion::ptrmap_view()`, to track the position of all the native pointers.

This PR is done in preparation for supporting new types of archived heap objects that have native pointers. E.g., `java.lang.invoke.ResolvedMethodName` has a pointer to a `Method*`.


Notes for reviewers:

- At dump time, the native pointers are remembered in `HeapShared::mark_native_pointers()`.
- At runtime, the native pointers are patched in `ArchiveHeapLoader::patch_native_pointers()`.
- The ad-hoc relocation code has been removed from javaClasses.cpp and systemDictionaryShared.cpp
- Many of the changes are for renaming from "oopmaps" to "bitmaps": the old code handled only a single type of pointers (oop references). The new code handles two types of bitmaps ("oopmap" is for oop references, "ptrmap" is for native pointers).

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

Commit messages:
 - clean up
 - 8293291: Simplify relocation of native pointers in archive heap

Changes: https://git.openjdk.org/jdk/pull/10296/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10296&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8293291
  Stats: 418 lines in 16 files changed: 185 ins; 153 del; 80 mod
  Patch: https://git.openjdk.org/jdk/pull/10296.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10296/head:pull/10296

PR: https://git.openjdk.org/jdk/pull/10296


More information about the hotspot-runtime-dev mailing list