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