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 F3EAD9FDD for ; Sun, 23 Oct 2011 23:32:56 +0000 (UTC) Received: (qmail 81539 invoked by uid 500); 23 Oct 2011 23:32:56 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 81460 invoked by uid 500); 23 Oct 2011 23:32:56 -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 81452 invoked by uid 99); 23 Oct 2011 23:32:56 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 23 Oct 2011 23:32:56 +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; Sun, 23 Oct 2011 23:32:53 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 9D8B2318075 for ; Sun, 23 Oct 2011 23:30:32 +0000 (UTC) Date: Sun, 23 Oct 2011 23:30:32 +0000 (UTC) From: "Hudson (Commented) (JIRA)" To: issues@commons.apache.org Message-ID: <1307823248.7203.1319412632646.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=13133777#comment-13133777 ] Hudson commented on OGNL-20: ---------------------------- Integrated in ognl #147 (See [https://builds.apache.org/job/ognl/147/]) Added OGNL-20 in the issue list OGNL-20 - Performance - Replace synchronized blocks with ReentrantReadWriteLock mcucchiara : http://svn.apache.org/viewvc/?view=rev&rev=1188001 Files : * /commons/proper/ognl/trunk/src/changes/changes.xml mcucchiara : http://svn.apache.org/viewvc/?view=rev&rev=1188000 Files : * /commons/proper/ognl/trunk * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ASTAdd.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ASTAnd.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ASTAssign.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ASTBitAnd.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ASTBitOr.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/DefaultTypeConverter.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/EvaluationPool.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ExpressionNode.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/MethodAccessor.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/NodeVisitor.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ObjectArrayPool.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ObjectMethodAccessor.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/ObjectPropertyAccessor.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/Ognl.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlOps.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/TypeConverter.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/enhance/ExpressionCompiler.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/Cache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/CacheException.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/CacheFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ClassCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ClassCacheHandler.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ClassCacheImpl.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ConcurrentHashMapCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ConcurrentHashMapCacheFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ConcurrentHashMapClassCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/Entry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/HashMapCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/HashMapCacheFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/HashMapClassCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ReentrantReadWriteLockCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ReentrantReadWriteLockCacheFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/ReentrantReadWriteLockClassCache.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/CacheEntry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/CacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/ClassCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/DeclaredMethodCacheEntry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/DeclaredMethodCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/FiedlCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeCacheEntry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/MethodAccessCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/MethodAccessEntryValue.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/MethodPermCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntry.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntryFactory.java * /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/TestOgnlRuntime.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/ConcurrentHashMapCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/ConstructorCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/DeclaredMethodCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/FieldCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/GenericMethodParameterTypeCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/MethodAccessCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/MethodPermCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/PermissionCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/internal/PropertyDescriptorCacheTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/ArrayElementsTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/ContextVariableTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/IndexAccessTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/InterfaceInheritanceTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/LambdaExpressionTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/MethodWithConversionTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/NestedMethodTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/NullHandlerTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/OgnlTestCase.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/OperatorTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/Performance.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/PrivateAccessorTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/PropertyTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/QuotingTest.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/enhance/TestExpressionCompiler.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/objects/Bean1.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/objects/Bean2.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/objects/Bean3.java * /commons/proper/ognl/trunk/src/test/java/org/apache/commons/ognl/test/objects/Root.java > 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 > Assignee: Maurizio Cucchiara > Attachments: Bench Results.txt, Caching_Mechanism_Benchmarks.patch > > > 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. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira