Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BA1687856 for ; Tue, 6 Sep 2011 13:31:34 +0000 (UTC) Received: (qmail 4239 invoked by uid 500); 6 Sep 2011 13:31:34 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 4114 invoked by uid 500); 6 Sep 2011 13:31:33 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 4102 invoked by uid 99); 6 Sep 2011 13:31:33 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 06 Sep 2011 13:31:33 +0000 X-ASF-Spam-Status: No, hits=-2000.5 required=5.0 tests=ALL_TRUSTED,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 06 Sep 2011 13:31:30 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id D65768377F for ; Tue, 6 Sep 2011 13:31:09 +0000 (UTC) Date: Tue, 6 Sep 2011 13:31:09 +0000 (UTC) From: "Simone Tripodi (JIRA)" To: issues@commons.apache.org Message-ID: <2038371856.20380.1315315869874.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <872907710.17472.1315239251255.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Commented] (OGNL-20) Performance - Replace synchronized blocks with ReentrantReadWriteLock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OGNL-20?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13097998#comment-13097998 ] Simone Tripodi commented on OGNL-20: ------------------------------------ +1 to {{ReentrantReadWriteLocks}}. IMHO {code} Map _methodParameterTypesCache = new HashMap(); synchronized (_methodParameterTypesCache) { Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get( m )) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; } {code} and {code} Map _methodParameterTypesCache = new HashMap(); Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get(m) ) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; {code} have totally different semantics. In one case, you synchronized the whole block - including the checks - in the second one, just limited the map accesses. Am I wrong? If yes, why? > Performance - Replace synchronized blocks with ReentrantReadWriteLock > --------------------------------------------------------------------- > > Key: OGNL-20 > URL: https://issues.apache.org/jira/browse/OGNL-20 > Project: OGNL > Issue Type: Improvement > Environment: ALL > Reporter: Greg Lively > > I've noticed a lot of synchronized blocks of code in OGNL. For the most part, these synchronized blocks are controlling access to HashMaps, etc. I believe this could be done far better using ReentrantReadWriteLocks. ReentrantReadWriteLock allows unlimited concurrent access, and single threads only for writes. Perfect in an environment where the ratio of reads is far higher than writes; which is typically the scenario for caching. Plus the access control can be tuned for reads and writes; not just a big synchronized{} wrapping a bunch of code. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira