I'm having some visible performance issue related to the use of method synchronized loadClass(String name, boolean resolve) in WebappClassLoader
I see that the author or least some of the author(s) of the class got the idea in other cases of a more specialize lock that against the entire instance. Should we just lock here using the name of the class we are looking for? My partial threads stack dump: 2014-05-14 12:36:01 Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.45-b01 mixed mode): "http-bio-31680-exec-57" - Thread t@124 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) ... "http-bio-31680-exec-56" - Thread t@123 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-55" - Thread t@122 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) Locked ownable synchronizers: - locked <444b3957> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "http-bio-31680-exec-54" - Thread t@121 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) "http-bio-31680-exec-53" - Thread t@120 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-52" - Thread t@119 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-51" - Thread t@118 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) "http-bio-31680-exec-50" - Thread t@117 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-49" - Thread t@116 java.lang.Thread.State: RUNNABLE at java.lang.Class.getClassLoader0(Native Method) at java.lang.Class.getClassLoader(Class.java:589) at com.sun.xml.internal.bind.v2.model.annotation.LocatableAnnotation.create(LocatableAnnotation.java:63) at com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:60) at com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:42) "http-bio-31680-exec-48" - Thread t@115 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481) "http-bio-31680-exec-47" - Thread t@114 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) "http-bio-31680-exec-46" - Thread t@113 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-45" - Thread t@112 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47) "http-bio-31680-exec-44" - Thread t@111 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303) "http-bio-31680-exec-43" - Thread t@110 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) "http-bio-31680-exec-42" - Thread t@109 java.lang.Thread.State: TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - parking to wait for <2aa68578> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424) at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "http-bio-31680-exec-40" - Thread t@107 java.lang.Thread.State: TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - parking to wait for <2aa68578> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424) at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "http-bio-31680-exec-39" - Thread t@106 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) "http-bio-31680-exec-38" - Thread t@105 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154) at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:241) "http-bio-31680-exec-37" - Thread t@104 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47) at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.loadObjectFactory(ModelBuilder.java:249) "http-bio-31680-exec-36" - Thread t@103 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:289) "http-bio-31680-exec-35" - Thread t@102 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-34" - Thread t@101 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-33" - Thread t@100 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-32" - Thread t@99 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303) "http-bio-31680-exec-31" - Thread t@98 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154) "http-bio-31680-exec-30" - Thread t@97 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185) "http-bio-31680-exec-29" - Thread t@96 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) "http-bio-31680-exec-28" - Thread t@95 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154) "http-bio-31680-exec-27" - Thread t@94 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119) "http-bio-31680-exec-26" - Thread t@93 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505) at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47) "http-bio-31680-exec-25" - Thread t@92 java.lang.Thread.State: BLOCKED at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605) - waiting to lock <264d40df> (a org.apache.catalina.loader.WebappClassLoader) owned by "http-bio-31680-exec-41" t@108 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358) at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303) .. and more --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org