Description
I would like to improve page loading time by improving its concurrent execution.
Here is a first patch related to it: TAP5-2545
Now the worst place from lock contention point of view is synchronization on PlasticClassLoader. Actually there are two kind of synchronization: synchronized methods in PlasticClassLoader and synchronized (loader) sections in PlasticClassPool.
Recently most class loaders added support for parallel class loading:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=464442
https://bz.apache.org/bugzilla/show_bug.cgi?id=57681
If we would like to split global lock, then we can use following trick for it.
We can substitute code like this:
public synchronized Class<?> defineClassWithBytecode(String className, byte[] bytecode) { return defineClass(className, bytecode, 0, bytecode.length); }
with following one:
public Class<?> defineClassWithBytecode(String className, byte[] bytecode) { synchronized (className.intern()) { return defineClass(className, bytecode, 0, bytecode.length); } }
It is just an idea to quickly check solution.
Can anybody check and discuss idea? Or even better to fix issue.
I'm not an expert in concurrency and afraid making changes in such a critical place at least before somebody reviewed my idea. So any feedback would be appreciated.
Attachments
Issue Links
- relates to
-
TAP5-1650 On a cold start with a large number of incoming requests, Tapestry can deadlock inside PlasticClassLoader/PlasticClassPool
-
- Closed
-