<i18n dev> <i18n> Performance patch for DateFormatSymbols.getZoneIndex(String)
Masayoshi Okutsu
masayoshi.okutsu at oracle.com
Mon Apr 9 07:46:41 PDT 2012
Hi Deven,
Here are my comments on the proposed changes.
- zoneIndexCache should be an instance field because WeakHashMap isn't
thread-safe and the order of IDs in zoneStrings differs in each
DateFormatSymbols.
- equals shouldn't be replaced with equalsIgnoreCase because time zone
IDs are (supposed to be) case-sensitive.
- Utilize auto-boxing/unboxing.
Thanks,
Masayoshi
On 4/9/2012 12:10 PM, Deven You wrote:
> Hi i18n-devs,
>
> The getZoneIndex() method is expensive and it's performance depends on
> which timezone you're in. This is because the code steps through a
> list of timezones until it finds the current one. This is happening
> over and over again. An idea would be to either cache it or rewrite
> the way we store time zone ids, such as a hashmap instead of an array.
> This patch[1] is for the cache option.
>
> Applications which format/parse dates using SimpleDateFormat
> repeatedly may obtain benefits from this patch, especially when run in
> a timezone far down the zoneStrings array the improvements will be
> even bigger.
>
> I have written a test case[2] which shows when a timezone which is in
> lower end of the zone strings array, the performance improvement this
> patch can get.
>
> test results:
>
> no patch:
> The total time is 742 ms!
>
> with this patch[1] :
> The total time is 508 ms!
>
> If increase the loop times to 1000000, the results are:
>
> no patch:
> The total time is 4743 ms!
>
> with this patch[1] :
> The total time is 2126 ms!
>
> The java version is:
>
> /home/deven/hgrps/jdk8/build/linux-i586/j2sdk-image/bin/java -version
> openjdk version "1.8.0-internal"
> OpenJDK Runtime Environment (build
> 1.8.0-internal-deven_2012_03_14_16_14-b00)
> OpenJDK Server VM (build 24.0-b02, mixed mode)
>
> [1]
> http://cr.openjdk.java.net/~youdwei/DateFormatSymbol_perf/webrev.00/
> <http://cr.openjdk.java.net/%7Eyoudwei/DateFormatSymbol_perf/webrev.00/>
> [2] GetZoneIndexTest.java
More information about the i18n-dev
mailing list