Quick observation:

 261         private BaseLocale getBaseLocale() {
 262             return (holder == null) ? holderRef.get() : holder;
 263         }

This method can return null if the soft ref has been cleared.


But you don’t check in equals:

 270             if (obj instanceof Key && this.hash == ((Key)obj).hash) {
 271                 BaseLocale other = ((Key) obj).getBaseLocale();
 272                 BaseLocale locale = this.getBaseLocale();
 273                 if (LocaleUtils.caseIgnoreMatch(other.getLanguage(), 
locale.getLanguage())

Paul.

> On Feb 6, 2018, at 9:51 AM, Claes Redestad <[email protected]> wrote:
> 
> Hi,
> 
> we can refactor sun.util.locale.BaseLocale+LocaleObjectCache to minimize the 
> number of SoftReferences created in Locale::<clinit> and when looking up 
> already defined BaseLocales inside the Locale constructor.
> 
> http://cr.openjdk.java.net/~redestad/8196869/jdk.00/
> 
> This is mainly a tiny startup optimization, dropping executed bytecode during 
> startup by a few thousand and reducing the minimum retained heap by a few Kb, 
> but also speeds up microbenchmarks repeatedly calling the Locale constructor 
> by ~1.25x. Tests stressing that dereferenced Locales are disposed of promptly 
> remain happy.
> 
> Thanks!
> 
> /Claes
> 

Reply via email to