[ https://issues.apache.org/jira/browse/LANG-1355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16199076#comment-16199076 ]
ASF GitHub Bot commented on LANG-1355: -------------------------------------- Github user garydgregory commented on a diff in the pull request: https://github.com/apache/commons-lang/pull/296#discussion_r143804862 --- Diff: src/main/java/org/apache/commons/lang3/time/FastTimeZone.java --- @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.lang3.time; + +import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Faster methods to produce custom time zones. + * + * @since 3.7 + */ +public class FastTimeZone { + + private static final TimeZone GREENWICH = new GmtTimeZone(false, 0, 0); + + // do not instantiate + private FastTimeZone() { + } + + /** + * Get the GMT TimeZone. + * @return A TimeZone with a raw offset of zero. + */ + public static TimeZone getGmtTimeZone() { + return GREENWICH; + } + + /** + * Get a TimeZone, looking first for GMT custom ids, then falling back to Olson ids. --- End diff -- In future patches, you can use the active voice for Javadocs: "Gets a TimeZone..." instead of "Get...". :-) > TimeZone.getTimeZone() in FastDateParser causes resource contention > ------------------------------------------------------------------- > > Key: LANG-1355 > URL: https://issues.apache.org/jira/browse/LANG-1355 > Project: Commons Lang > Issue Type: Bug > Components: lang.time.* > Affects Versions: 3.6 > Environment: Windows > Reporter: Keith Boone > Assignee: Charles Honton > Original Estimate: 48h > Remaining Estimate: 48h > > 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. -- This message was sent by Atlassian JIRA (v6.4.14#64029)