On Tue, 1 Aug 2023 20:21:11 GMT, Naoto Sato <na...@openjdk.org> wrote:

>> This is stemming from the PR: https://github.com/openjdk/jdk/pull/14211 
>> where aggressive GC can cause NPE in `BaseLocale$Key` class. I refactored 
>> the in-house cache with WeakHashMap, and removed the Key class as it is no 
>> longer needed (thus the original NPE will no longer be possible). Also with 
>> the new JMH test case, it gains some performance improvement:
>> 
>> (w/o fix)
>> 
>> Benchmark                       Mode  Cnt      Score     Error  Units
>> LocaleCache.testForLanguageTag  avgt   20   5781.275 ± 569.580  ns/op
>> LocaleCache.testLocaleOf        avgt   20  62564.079 ± 406.697  ns/op
>> 
>> (w/ fix)
>> Benchmark                       Mode  Cnt      Score     Error  Units
>> LocaleCache.testForLanguageTag  avgt   20   4801.175 ± 371.830  ns/op
>> LocaleCache.testLocaleOf        avgt   20  60394.652 ± 352.471  ns/op
>
> Naoto Sato has updated the pull request with a new target base due to a merge 
> or a rebase. The pull request now contains 29 commits:
> 
>  - Merge branch 'master' of https://git.openjdk.org/jdk into 
> JDK-8309622-Cache-BaseLocale
>  - small cleanup
>  - Merge branch 'pull/14684' into JDK-8309622-Cache-BaseLocale
>  - Update ReferencedKeyTest.java
>  - Simple versions of create
>  - Add flag for reference queue type
>  - Merge branch 'master' into 8310913
>  - Update to use VirtualThread friendly stale queue.
>  - Merge branch 'pull/14684' into JDK-8309622-Cache-BaseLocale
>  - Remove warning tied to String Templates
>  - ... and 19 more: https://git.openjdk.org/jdk/compare/7ba8c69a...0e435898

src/java.base/share/classes/sun/util/locale/BaseLocale.java line 96:

> 94: 
> 95:     // Non-normalized to normalized BaseLocale cache for saving costly 
> normalizations
> 96:     private static final Map<BaseLocale, BaseLocale> CACHE = 
> ReferencedKeyMap.create(true, ConcurrentHashMap::new);

You can now simply use a `ReferencedKeySet<BaseLocale>` and call [`intern(T, 
UnaryOperator<T>)`](https://github.com/openjdk/jdk/blob/ce2a7ea40a22c652e5f8559c91d5eea197e2d708/src/java.base/share/classes/jdk/internal/util/ReferencedKeySet.java#L202)
 to cache a normalized variety computed from a non-normalized base.

test/jdk/jdk/internal/util/ReferencedKeyTest.java line 1:

> 1: /*

Is the test removal intentional?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14404#discussion_r1309756538
PR Review Comment: https://git.openjdk.org/jdk/pull/14404#discussion_r1309757683

Reply via email to