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