RFR: 8260337: Optimize ImageReader lookup, used by Class.getResource

Claes Redestad redestad at openjdk.java.net
Mon Jan 25 15:30:52 UTC 2021


On Mon, 25 Jan 2021 00:05:52 GMT, Claes Redestad <redestad at openjdk.org> wrote:

> This patch optimizes the code paths exercised by `String.class.getResource("String.class")` by:
> 
> - Adding an ASCII fast-path to methods verifying strings in the jimage, which can then be done allocation-free
> - Avoiding the allocation of the `long[8]` attributes when verifying only for the purpose of verifying a path exists
> - Using the `JNUA.create` fast-path in `SystemModuleReader` (which should be OK since we just verified the given name is a JRT path)
> - Remove a redundant check in `Class::resolveName` and fitting the `StringBuilder` to size

On the provided benchmark we can observe a 2x speed-up and a 70% reduction in allocation.

Baseline:
Benchmark                                                      Mode  Cnt     Score     Error   Units
ClassGetResource.stringClass                                   avgt    5  2885.403 ± 309.787   ns/op
ClassGetResource.stringClass:·gc.alloc.rate.norm               avgt    5  1368.124 ±   0.056    B/op

Patch:
Benchmark                                                      Mode  Cnt     Score     Error   Units
ClassGetResource.stringClass                                   avgt    5  1411.980 ± 155.877   ns/op
ClassGetResource.stringClass:·gc.alloc.rate.norm               avgt    5   408.038 ±   0.043    B/op

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

PR: https://git.openjdk.java.net/jdk/pull/2212


More information about the core-libs-dev mailing list