RFR: 8367005: ImageReader refactor caused performance regressions for startup and footprint

David Beaumont duke at openjdk.org
Wed Sep 10 21:58:25 UTC 2025


Summary: Add two new methods to ImageReader to make SystemModuleReader more performant.

Analysis of benchmarks shows that when the vast majority of resources (~11,000 in the Perfstartup-SwingSet-G1 benchmark) tested for in SystemModuleReader do NOT exist, performance is degraded compared to this code prior to the refactoring in JDK-8360037.

The current refactoring of ImageReader has everything going through a single "findNode()" method for simplest possible encapsulation, but while this is functionally correct, it's not tuned for testing for the non-existence of resources.

In particular:
1. SystemModuleReader only requests resources (i.e. things in the jimage file with paths *not* starting /modules/ or /packages/). This means findNode() does two look-ups for the resource, the first of which will always fail.
2. The containsResource() logic doesn't need to create and cache nodes in ImageReader, it can just check for the presence of an ImageLocation corresponding to a resource.

Thus two new methods are added to resolve these cases:
* findResourceNode(module, path)
* containsResource(module, path)

Their API takes module and path separately so as to not be confusable with findNode(nodename).

However care must be taken to prevent these methods being fooled into returning non-resource entries (this was possible before the refactoring by using module names like "modules" or "packages") so new tests have been added.

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

Commit messages:
 - Add more performant methods for SystemModuleReader

Changes: https://git.openjdk.org/jdk/pull/27203/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27203&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8367005
  Stats: 134 lines in 3 files changed: 118 ins; 10 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/27203.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27203/head:pull/27203

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


More information about the core-libs-dev mailing list