Hi, we are using a third party JAR which is about 35MB in size but is packed with many many obfuscated classes. Due to the nature of the functionality it loads classes all the time from the JAR file . I'm finding that will it loads the class the other threads which want to load classes get blocked. This is a typical stack trace:
java.lang.Thread.State: RUNNABLE at java.util.Hashtable.hash(Hashtable.java:239) at java.util.Hashtable.get(Hashtable.java:434) - locked <0x00000007b0a61108> (a java.util.Hashtable) at sun.security.util.SignatureFileVerifier.updateSigners(SignatureFileVerifier.java:670) at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:259) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:193) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:307) at java.util.jar.JarVerifier.update(JarVerifier.java:218) at java.util.jar.JarFile.initializeVerifier(JarFile.java:345) at java.util.jar.JarFile.getInputStream(JarFile.java:412) - locked <0x00000007af3475b0> (a java.util.jar.JarFile) at org.apache.catalina.webresources.JarResource.getJarInputStreamWrapper(JarResource.java:50) at org.apache.catalina.webresources.AbstractArchiveResource.getContent(AbstractArchiveResource.java:175) at org.apache.catalina.loader.WebappClassLoaderBase.findResourceInternal(WebappClassLoaderBase.java:2579) at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2405) at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274) - locked <0x00000007af33f8e8> (a java.lang.Object) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) at com.aspose.slides.p2cbca448.knx.for(Unknown Source) at com.aspose.slides.p2cbca448.knx.do(Unknown Source) It seems all the time is spent in the SignatureFileVerifier part - is there any way to stop the class loader doing this and thus speed up the class loading? I also tried configuring the ParallelWebappClassLoader which is configured but doesn't seem to come into play for this. I tested by doing: conf/Catalina/localhost/test.xml: <Context> <Loader loaderClass="org.apache.catalina.loader.ParallelWebappClassLoader" /> </Context> and webapps/test/index.jsp: ClassLoader: <%= this.getClass().getClassLoader().getParent() %> which gives me (when accessed at test/index.jsp): ClassLoader: ParallelWebappClassLoader context: test delegate: false ----------> Parent Classloader: java.net.URLClassLoader@264a1535 (Tomcat 8.0.18)