Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.6
-
None
-
Windows
Description
Under heavy load we are seeing contention in FastDateParser.parse() on calls to TimeZone.getTimeZone(). TimeZone.getTimeZone() is a synchronized static in the Oracle JVM.
Our proposed solution is to add a class TimeZoneCache containing a single method getTimeZone() which gets the requested time zone from a ConcurrentMap, and if not present, looks it up via TimeZone.getTimeZone() and caches it before returning it.
Then replace calls to TimeZone.getTimeZone() in FastDateParser ( and whereever else) to calls to TimeZoneCache.getTimeZone().
The reason to add a separate class is because it can also be used by other applications which heavily parse or format or do other things where TimeZone is repeatedly needed.
Under extreme load we have seen an 50:1 improvement in calls to FastDateParser.parse(). This saves about a ms/call in our test environment, and reduces contention.
Attachments
Issue Links
- links to