On Thu, 1 Jun 2023 08:58:23 GMT, SUN Guoyun <d...@openjdk.org> wrote:
>> command: make test CONF=fastdebug JTREG="VM_OPTIONS=-Xcomp" >> TEST=gc/TestAllocHumongousFragment.java >> error info: >> >> Caused by: java.lang.NullPointerException: Cannot invoke >> "sun.util.locale.BaseLocale.getVariant()" because "base" is null >> at java.base/java.util.Locale.forLanguageTag(Locale.java:1802) >> at >> java.base/sun.util.cldr.CLDRBaseLocaleDataMetaInfo.<clinit>(CLDRBaseLocaleDataMetaInfo.java:41) >> ... 24 more >> >> Note that the test runs with -XX:ShenandoahGCHeuristics=aggressive >> -XX:+ShenandoahOOMDuringEvacALot and SoftReferences are involved >> (LocaleObjectCache uses SoftReferences, used by printf method called in >> getRandomInstance(Utils.java:511)). >> >> Maybe we have to deal with the case where the getBaseLocale() return value >> is null. the call stack is: >> >> at >> java.base/sun.util.locale.LocaleObjectCache.get(LocaleObjectCache.java:64) >> at java.base/sun.util.locale.BaseLocale.getInstance(BaseLocale.java:169) >> at >> java.base/sun.util.locale.InternalLocaleBuilder.getBaseLocale(InternalLocaleBuilder.java:524) >> at java.base/java.util.Locale.forLanguageTag(Locale.java:1874) >> >> in LocaleObjectCache.java:64 >> >> 62 if (key == null || newVal == null) { >> >> 63 // subclass must return non-null key/value object >> >> 64 return null; // run here >> 65 } > > SUN Guoyun has refreshed the contents of this pull request, and previous > commits have been removed. The incremental views will show differences > compared to the previous content of the PR. The pull request contains one new > commit since the last revision: > > 8289220: Locale.forLanguageTag throws NPE due to soft ref used in locale > cache being cleared src/java.base/share/classes/sun/util/locale/BaseLocale.java line 369: > 367: BaseLocale l = key.holder; > 368: BaseLocale locale = new BaseLocale(l.getLanguage(), > l.getScript(), l.getRegion(), l.getVariant(), true); > 369: return (new Key(locale)).getBaseLocale(); Perhaps a more rigorous approach would look like this: <pre><code class="java"> BaseLocale locale = new BaseLocale(l.getLanguage(), l.getScript(), l.getRegion(), l.getVariant(), true); BaseLocal value = (new Key(locale)).getBaseLocale(); Reference.reachabilityFence(locale); return value; </code></pre> But the current patch has passed the tests with `-XX:ShenandoahGCHeuristics=aggressive -XX:+ShenandoahOOMDuringEvacALot`, so I think the current patch is OK. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/14211#discussion_r1213813143