[
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