+1
> On May 12, 2014, at 11:03 PM, Gregg Wonderly <gr...@wonderly.org> wrote: > > All of these things are the reason why we just need to take Peter’s hard work > an go with it. There is really no reason to look back. The performance > issues and security problems that Peter has so patiently waded through have > needed attention for a long time. Only people trying to actually stress and > use Jini to it’s full capacity will have any chance at seeing these things be > big barriers, but that doesn’t discount their importance to even small > applications. > > Gregg Wonderly > >> On May 12, 2014, at 6:17 PM, Peter <j...@zeus.net.au> wrote: >> >> Hi Simon, >> >> http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/ClassLoading.java?view=markup >> >> During stress test profiling I found Class.forName to be heavily contended >> (the method with a ClassLoader parameter). >> >> Uncontended synchronization is very fast, so rather than employ parallel >> ClassLoading (which requires a lock for every class and isn't part of the >> jvm or lang specs), I decided to try thread confinement instead (for each >> ClassLoader). Before I found class loading to be a bottle neck, I had to >> fix a number of other throughput bottlenecks however: >> >> 1. Security Policy provider would cause contention while it performed dns >> calls. Dns calls are still made, but far fewer and concurrent security >> checks are now non blocking. The new policy provider takes advantage of >> immutability, how often do you change your policy files? >> 2. SecureClassLoader uses CodeSource in a loader map as keys, causing >> multiple dns lookup calls, fixed that with a RFC3986 compliant URI class to >> replace URL based keys in maps. >> 3. PreferredClassLoader also used URL's as keys in maps. >> 4. Exising thread pools didn't take advantage of concurrent utilities and >> TaskManager performed very poorly when it's task queue became large, since >> dependant tasks had to synchronize and iterate over the whole queue to find >> preceeding tasks. >> >> All fixed now, just need to reduce network traffic as Sockets are now the >> bottleneck. >> >> After I finish with latent bugs, I'll investigate using a provider to plug >> in various serialization frameworks that are available now. >> >> That and codebase provisioning should make River really sing. >> >> The stress tests were devised by the original Jini team, they're probably >> the closest thing I've got to deployment scenario's. >> >> Regards, >> >> Peter. >> ----- Original message ----- >>> Peter, >>> >>> With apologies that this it totally off-topic, but you made a comment >>> here that I'd really like to understand better: >>> >>> * ClassLoading is thread confined for each classloader to avoid >>>> contention. >>> >>> >>> Without impinging on your time unduly, are you able to point me at >>> something that would allow me to discover what this is about? It sounds >>> interesting, but I have no idea how this would work. >>> >>> And, I quite understand if you remain silent :) >>> >>> Cheers, >>> Simon >