> 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.

David Beaumont has updated the pull request incrementally with one additional 
commit since the last revision:

  Removed unnecessary path check and added extra test for modules not being 
returned.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/27203/files
  - new: https://git.openjdk.org/jdk/pull/27203/files/9ec2db29..18f23327

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=27203&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27203&range=03-04

  Stats: 29 lines in 2 files changed: 19 ins; 4 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

Reply via email to