"Одним из них является то, что XPathFactory.newInstance () очень дорогой;"
Правдивое утверждение! Я заметил, что для каждого потока, вызывающего newInstance (), jaxp.properties должен находиться в пути к классам и читать:
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.zip.ZipFile.getEntry(ZipFile.java:160)
- locked <0x0000000968dec028> (a sun.net.www.protocol.jar.URLJarFile)
at java.util.jar.JarFile.getEntry(JarFile.java:208)
at sun.net.www.protocol.jar.URLJarFile.getEntry(URLJarFile.java:107)
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:114)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:132)
at java.net.URL.openStream(URL.java:1010)
at javax.xml.xpath.SecuritySupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at javax.xml.xpath.SecuritySupport.getURLInputStream(Unknown Source)
at javax.xml.xpath.XPathFactoryFinder._newFactory(Unknown Source)
at javax.xml.xpath.XPathFactoryFinder.newFactory(Unknown Source)
at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)
at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)
ZipFile выполняет собственный вызов (я полагаю, zlib) и распаковывает jar-файл, который требует дискового ввода-вывода и распаковки zip с привязкой к процессору. В этом случае у нас было более 1400 потоков, ожидающих этой блокировки.