RFR: 8290833: Remove ConstantPoolCache::walk_entries_for_initialization()

Ioi Lam iklam at openjdk.org
Thu Aug 4 23:51:29 UTC 2022


**Background:**

`ConstantPoolCache::walk_entries_for_initialization()` is called by `ConstantPoolCache::remove_unshareable_info()` to restore the CpCache to the state immediately after the class has been rewritten by the Rewriter (which happens during the class linking phase). In most part, this means the `ConstantPoolCacheEntry`'s need to be zeroed. However, the `_f2` fields of some of the entries are initialized to be non-zero by the Rewriter and must be preserved.

The reason `walk_entries_for_initialization()` exists is that after `Rewriter::rewrite()` has finished, some information about what is stored inside the CpCache is discarded (e.g., `Rewriter::_invokedynamic_references_map`). As a result, we cannot easily determine which entries has a `_f2` field that need to be preserved. We must walk all the bytecodes in all the methods of this class to recompute this information.

This is awkward and time consuming. It also needs to be updated if the `Rewriter` ever changes.

Also, for future optimizations, we may need to pre-resolve a subset of the CpCache entries during CDS dump time. Trying to make that work alongside `walk_entries_for_initialization()` seems too complicated.

**Fix:**

Store a copy of the CpCache after rewritting. Use this to revert the CpCache's state inside  `ConstantPoolCache::remove_unshareable_info()`.

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

Commit messages:
 - fixed minimal build
 - 8290833: Remove ConstantPoolCache::walk_entries_for_initialization()

Changes: https://git.openjdk.org/jdk/pull/9759/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9759&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8290833
  Stats: 156 lines in 10 files changed: 73 ins; 64 del; 19 mod
  Patch: https://git.openjdk.org/jdk/pull/9759.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9759/head:pull/9759

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


More information about the hotspot-runtime-dev mailing list