<i18n dev> RFR: 8261254: Initialize charset mapping data lazily
Claes Redestad
redestad at openjdk.java.net
Sun Feb 7 19:36:53 UTC 2021
On Sun, 7 Feb 2021 19:08:18 GMT, Claes Redestad <redestad at openjdk.org> wrote:
> This patch refactor JDK internal charsets to initialize charset mapping data lazily when needed via holder classes. This means both a startup improvement in some cases, and possible throughput improvements for all DoubleByte-based Charsets.
>
> Testing: tier1-3
Applications calling `Charset.availableCharsets()` might see a decent startup improvement (125-190ms -> 57-95ms first call overhead).
All `DoubleByte`-derived charsets can see a throughput improvement on benchmarks thanks to removing DCL initialization checks with a Holder pattern implementation, which allows static data to be declared final and be more amenable to optimizations:
Before:
Benchmark (charsetName) Mode Cnt Score Error Units
StringDecode.WithCharset.decodeCharset MS932 avgt 15 280.072 ± 17.217 ns/op
StringDecode.WithCharset.decodeCharsetName MS932 avgt 15 289.368 ± 18.174 ns/op
After:
Benchmark (charsetName) Mode Cnt Score Error Units
StringDecode.WithCharset.decodeCharset MS932 avgt 15 254.906 ± 15.095 ns/op
StringDecode.WithCharset.decodeCharsetName MS932 avgt 15 268.241 ± 15.725 ns/op
-------------
PR: https://git.openjdk.java.net/jdk/pull/2449
More information about the i18n-dev
mailing list