<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>When switching from Java 8 to Java 11, we're experiencing an important slowdown when executing LoginContext.login(), especially under concurrency.</div><div><br></div><div>We tracked this down to JDK-8047789 which changed the way the lookup of LoginModules is done in LoginContext.invoke. Previously, it was a simple Class.forName that is of course extremely optimized. After JDK-8047789, there is first a ServiceLoader-based lookup for the class. This lookup doesn't seem to be cached. In our case, it has to open the 400+ JARs in our classpath (we're not using modules yet) to check the content of META-INF/services/javax.security.auth.spi.LoginModule, and in addition this hits a synchronized block in ZipFile.getEntry which prevents any performance under concurrency.</div><div><br></div><div>Is there anything we can do to improve LoginContext.login() in this context?</div><div><br></div><div>For reference, the code path to the synchronized block:</div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at java.util.zip.ZipFile.getEntry(java.base@11.0.4/ZipFile.java:346)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>- locked <0x000000068b18bdd0> (a java.util.jar.JarFile)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>at java.util.zip.ZipFile$1.getEntry(java.base@11.0.4/ZipFile.java:1121)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at java.util.jar.JarFile.getEntry0(java.base@11.0.4/JarFile.java:576)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>at java.util.jar.JarFile.getEntry(java.base@11.0.4/JarFile.java:506)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>at java.util.jar.JarFile.getJarEntry(java.base@11.0.4/JarFile.java:468)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at jdk.internal.loader.URLClassPath$JarLoader.getResource(java.base@11.0.4/URLClassPath.java:929)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at jdk.internal.loader.URLClassPath$JarLoader.findResource(java.base@11.0.4/URLClassPath.java:912)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>at jdk.internal.loader.URLClassPath$1.next(java.base@11.0.4/URLClassPath.java:341)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>at jdk.internal.loader.URLClassPath$1.hasMoreElements(java.base@11.0.4/URLClassPath.java:351)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>at java.net.URLClassLoader$3$1.run(java.base@11.0.4/URLClassLoader.java:687)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>at java.net.URLClassLoader$3$1.run(java.base@11.0.4/URLClassLoader.java:685)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>at java.security.AccessController.doPrivileged(java.base@11.0.4/Native Method)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>at java.net.URLClassLoader$3.next(java.base@11.0.4/URLClassLoader.java:684)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>at java.net.URLClassLoader$3.hasMoreElements(java.base@11.0.4/URLClassLoader.java:709)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>at java.lang.CompoundEnumeration.next(java.base@11.0.4/ClassLoader.java:3022)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>at java.lang.CompoundEnumeration.hasMoreElements(java.base@11.0.4/ClassLoader.java:3031)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>at org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.inc(WebappClassLoaderBase.java:2670)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>at org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.hasMoreElements(WebappClassLoaderBase.java:2655)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(java.base@11.0.4/ServiceLoader.java:1202)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(java.base@11.0.4/ServiceLoader.java:1220)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(java.base@11.0.4/ServiceLoader.java:1264)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>at java.util.ServiceLoader$2.hasNext(java.base@11.0.4/ServiceLoader.java:1299)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>at java.util.ServiceLoader$3.hasNext(java.base@11.0.4/ServiceLoader.java:1384)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>at javax.security.auth.login.LoginContext.invoke(java.base@11.0.4/LoginContext.java:691)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>at javax.security.auth.login.LoginContext$4.run(java.base@11.0.4/LoginContext.java:665)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at javax.security.auth.login.LoginContext$4.run(java.base@11.0.4/LoginContext.java:663)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>at java.security.AccessController.doPrivileged(java.base@11.0.4/Native Method)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>at javax.security.auth.login.LoginContext.invokePriv(java.base@11.0.4/LoginContext.java:663)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>at javax.security.auth.login.LoginContext.login(java.base@11.0.4/LoginContext.java:574)</div></div><div><br></div><div>Thanks,</div><div><br></div><div>Florent<br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><table style="color:rgb(10,10,10);font-family:Arial,Helvetica,sans-serif;font-size:12px;border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;width:600px"><tbody><tr style="padding:0px;vertical-align:top"><td style="font-family:Arial,Helvetica,sans-serif;line-height:1.33;padding:0px;vertical-align:top;word-wrap:break-word;width:38px;border-collapse:collapse"><a href="https://www.nuxeo.com/" style="background-color:transparent;border-bottom-width:0px;color:rgb(0,102,255);line-height:1.33;margin:0px;padding:0px" target="_blank"><img src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_64/nuxeo-logo-x.png" alt="Nuxeo Logo" width="32" height="32" style="border: none; display: block; vertical-align: middle; max-width: 100%; height: 32px; clear: both; margin-top: 4px; outline: 0px; text-decoration: none; width: 32px;"></a></td><td style="font-family:Arial,Helvetica,sans-serif;line-height:1.33;padding:0px;vertical-align:top;word-wrap:break-word;border-collapse:collapse"><p style="font-size:15px;line-height:1.33;color:rgb(31,40,191);margin:0px;padding:0px"><span style="font-weight:700">Florent Guillaume</span>  Head of R&D  <a href="https://www.linkedin.com/in/fguillaume/" style="background-color:transparent;border-bottom-width:0px;color:inherit" target="_blank"><img src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/linkedin.png" alt="LinkedIn" width="14" height="14" style="border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto;"></a> <a href="https://twitter.com/efge" style="background-color:transparent;border-bottom-width:0px;color:inherit" target="_blank"><img src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/twitter.png" alt="Twitter" width="14" height="14" style="border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto;"></a> <a href="https://github.com/efge" style="background-color:transparent;border-bottom-width:0px;color:inherit" target="_blank"><img src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/github.png" alt="Github" width="14" height="14" style="border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto;"></a></p><p style="font-weight:700;font-size:15px;line-height:1.33;color:rgb(0,102,255);margin:0px 0px 10px;padding:0px">Nuxeo Content Services Platform. <span style="color:rgb(31,40,191)">Stay ahead.</span></p></td></tr></tbody></table></div></div></div></div></div></div></div></div></div></div></div></div></div></div>