RFR: 8351556: Optimize Location.isModuleOrientedLocation
Aleksey Shipilev
shade at openjdk.org
Mon Mar 10 18:28:55 UTC 2025
On Mon, 10 Mar 2025 18:22:27 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> 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`
5950X benchmark run:
Benchmark Mode Cnt Score Error Units
# Before
LocationFor.custom avgt 9 9.372 ± 0.069 ns/op
LocationFor.standard avgt 9 163.774 ± 1.459 ns/op
# After
LocationFor.custom avgt 9 1.982 ± 0.036 ns/op
LocationFor.standard avgt 9 38.854 ± 0.276 ns/op
-------------
PR Comment: https://git.openjdk.org/jdk/pull/23973#issuecomment-2711459225
More information about the compiler-dev
mailing list