[ 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