RFR: 8351556: Optimize Location.isModuleOrientedLocation

Aleksey Shipilev shade at openjdk.org
Mon Mar 10 18:28:55 UTC 2025


Leyden's JavacBenchApp benchmarks shows ~1% of time of the very first iteration is spent doing `Pattern.compile` in `Location.isModuleOrientedLocation`. Additionally, `Pattern.compile` becomes hot and requires JIT compilation, which eats CPU time. We can do better.

This improvement naturally spills over to `Location.locationFor`.

Things we do:
 1. Avoid `putIfAbsent` on fast-path.
 2. Lazily cache `Pattern` and reuse for all related paths.
 3. Capture output/module flags ahead of time, instead of recomputing them.
 4. (for interpreter/startup benefit) Use direct class type instead of interface.

There is also a little matching bug ([JDK-8351561](https://bugs.openjdk.org/browse/JDK-8351561)), which this performance improvement would retain.

Additional testing:
 - [x] New regression test still works
 - [x] New benchmark shows improvements
 - [x] Linux x86_64 server fastdebug, `langtools_all`

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

Commit messages:
 - Fix

Changes: https://git.openjdk.org/jdk/pull/23973/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23973&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8351556
  Stats: 194 lines in 4 files changed: 178 ins; 8 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/23973.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23973/head:pull/23973

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


More information about the compiler-dev mailing list