RFR: 8377339: Implement AOTCacheAccess::get_archived_object using heap roots

Ioi Lam iklam at openjdk.org
Fri Feb 6 06:06:28 UTC 2026


The API `oop AOTCacheAccess::get_archived_object(int)` is used by the AOT compiler to access heap objects in the AOT cache.

 Because the objects can move in the production run, there's currently a complicated way to keep them alive using OopHandles.

https://github.com/openjdk/leyden/blob/6ce1832147ef3f01602b8fac02160038422a77bf/src/hotspot/share/cds/heapShared.cpp#L545-L610

However, we already have a mechanism for this: `oop HeapShared::get_root(int index, ...)`

So we just need to make sure that all oops needed by the AOT compiler are all stored as heap roots.

This PR is intended to provide an acceptable solution in the short run to be used by the initial AOT compiler integration into the mainline.

The AOT compiler only needs the following objects

- a few common exception objects
- class loaders
- class mirrors
- interned strings
- method handles

Most of these objects are in the roots already. We just need to add interned strings and method handles into the heap roots.

(In the future, we should move the AOT compilation before we dump the heap. This way we know exactly what oops should be stored into the heap roots.)

Notes to reviewers
- `HeapShared::archived_object_cache()` can now survive GCs that might happen during AOT compilation. I added a new function `HeapShared::archived_object_cache_hash()` with comments about how it uses `oop::identity_hash()`.
- This code is added to make sure interned strings and method handles are roots

  if (AOTCodeCache::is_dumping_code() &&
               (java_lang_invoke_MethodHandle::is_instance(obj) || is_interned_string(obj))) {
      // Needed by AOT compiler.
      append_root(obj);
    }

- Also some clean up that's not necessary but nice to have:
  - I removed the `DumpedInternedStrings` and replaced it with much simpler code.

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

Commit messages:
 - clean up
 - reverted some code related to oop clearing
 - step 3
 - step 2 -- remove HeapShared::clear_root
 - step1

Changes: https://git.openjdk.org/leyden/pull/108/files
  Webrev: https://webrevs.openjdk.org/?repo=leyden&pr=108&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8377339
  Stats: 349 lines in 13 files changed: 83 ins; 202 del; 64 mod
  Patch: https://git.openjdk.org/leyden/pull/108.diff
  Fetch: git fetch https://git.openjdk.org/leyden.git pull/108/head:pull/108

PR: https://git.openjdk.org/leyden/pull/108


More information about the leyden-dev mailing list