[ 
https://issues.apache.org/jira/browse/RIVER-396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tom Hobbs updated RIVER-396:
----------------------------

    Fix Version/s: River_2.2.0

Moving to River 2.2.0

> PreferredClassProvider classloader cache concurrency improvement
> ----------------------------------------------------------------
>
>                 Key: RIVER-396
>                 URL: https://issues.apache.org/jira/browse/RIVER-396
>             Project: River
>          Issue Type: Improvement
>          Components: net_jini_loader
>    Affects Versions: River_2.1.2
>            Reporter: Chris Dolan
>            Priority: Minor
>             Fix For: River_2.2.0
>
>         Attachments: PreferredClassProvider.java.patch
>
>
> The PreferredClassProvider.lookupLoader() method uses a single coarse lock to 
> synchronize its cache of ClassLoader instances. Because the creation of a 
> ClassLoader can be an expensive operation (including remote calls in some 
> special cases) this global lock can be a significant bottleneck.
> Attached is a patch to refactor that code to hold only a finer grained lock 
> while constructing the ClassLoader in case of a cache miss.  The refactor 
> moves the ReferenceQueue field out of any synchronized block, because that 
> class is already thread-safe. The refactor still holds a coarse lock while 
> checking the cache, but holds only a finer lock (per cache line) while 
> checking and possibly creating the ClassLoader.
> See also RIVER-336 where an alternative version of this patch was proposed.  
> But a following analysis revealed concurrency problems with that patch: 
> http://mail-archives.apache.org/mod_mbox/river-dev/201104.mbox/browser

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to