RFR: 8196869: Optimize Locale creation
Paul Sandoz
paul.sandoz at oracle.com
Tue Feb 6 19:55:34 UTC 2018
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 <claes.redestad at oracle.com> 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
>
More information about the core-libs-dev
mailing list