diff options
author | Anton Hansson <hansson@google.com> | 2018-02-14 13:50:56 +0000 |
---|---|---|
committer | Anton Hansson <hansson@google.com> | 2018-02-14 16:22:11 +0000 |
commit | f055b94e2bf6ea4696b6bac932f9ae4f542e91a8 (patch) | |
tree | ce00fc12655b7af13bf983be33db8fbca76fb8a4 | |
parent | 526cd9137d3ac3b03f8045442ea39d970bda7e88 (diff) |
Remove cachedLocaleData from DecimalFormat.
This cache was removed upstream in
http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/1d7a6adf499f,
and doesn't appear to be making a meaningful difference to
performance.
Benchmark results (product: hikey):
Before:
Experiment {instrument=runtime, benchmarkMethod=time_instantiation, vm=default, parameters={}}
Results:
runtime(ns): min=198214.70, 1st qu.=198214.70, median=198214.70, mean=198214.70, 3rd qu.=198214.70, max=198214.70
After:
Experiment {instrument=runtime, benchmarkMethod=time_instantiation, vm=default, parameters={}}
Results:
runtime(ns): min=197940.89, 1st qu.=197940.89, median=197940.89, mean=197940.89, 3rd qu.=197940.89, max=197940.89
Bug: 31930415
Test: m -j droid & ran benchmark
Change-Id: I83deaead58b7f79d2016fc68add2ec8b861414c7
-rw-r--r-- | benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java | 6 | ||||
-rw-r--r-- | ojluni/src/main/java/java/text/DecimalFormat.java | 27 |
2 files changed, 17 insertions, 16 deletions
diff --git a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java index 0c4aa77874..2436379094 100644 --- a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java +++ b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java @@ -153,4 +153,10 @@ public class DecimalFormatBenchmark { public void time_formatToCharacterIterator10e1000(int reps) { formatToCharacterIterator(BD10E1000, reps); } + + public void time_instantiation(int reps) { + for (int i = 0; i < reps; i++) { + new DecimalFormat(); + } + } } diff --git a/ojluni/src/main/java/java/text/DecimalFormat.java b/ojluni/src/main/java/java/text/DecimalFormat.java index ff9d90f055..2cb1473407 100644 --- a/ojluni/src/main/java/java/text/DecimalFormat.java +++ b/ojluni/src/main/java/java/text/DecimalFormat.java @@ -409,19 +409,21 @@ public class DecimalFormat extends NumberFormat { public DecimalFormat() { // Get the pattern for the default locale. Locale def = Locale.getDefault(Locale.Category.FORMAT); - // BEGIN Android-changed: Use ICU LocaleData. - // try to get the pattern from the cache - String pattern = cachedLocaleData.get(def); - if (pattern == null) { /* cache miss */ - // Get the pattern for the default locale. - pattern = LocaleData.get(def).numberPattern; - /* update cache */ - cachedLocaleData.putIfAbsent(def, pattern); + // BEGIN Android-changed: Use ICU LocaleData. Remove SPI LocaleProviderAdapter. + /* + LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(NumberFormatProvider.class, def); + if (!(adapter instanceof ResourceBundleBasedAdapter)) { + adapter = LocaleProviderAdapter.getResourceBundleBased(); } - // END Android-changed: Use ICU LocaleData. + String[] all = adapter.getLocaleResources(def).getNumberPatterns(); + */ + String pattern = LocaleData.get(def).numberPattern; + // END Android-changed: Use ICU LocaleData. Remove SPI LocaleProviderAdapter. + // Always applyPattern after the symbols are set this.symbols = DecimalFormatSymbols.getInstance(def); // Android-changed: use initPattern() instead of removed applyPattern(String, boolean). + // applyPattern(all[0], false); initPattern(pattern); } @@ -1904,11 +1906,4 @@ public class DecimalFormat extends NumberFormat { // Proclaim JDK 1.1 serial compatibility. static final long serialVersionUID = 864413376551465018L; - - // Android-added: cachedLocaleData for caching default number format pattern per locale. - /** - * Cache to hold the NumberPattern of a Locale. - */ - private static final ConcurrentMap<Locale, String> cachedLocaleData - = new ConcurrentHashMap<>(3); } |