我们继承了一个广泛使用 JSTL XML 标记,尤其是 XPath 选择器的应用程序(基于 Java,在 WebLogic 10.3.5 上运行)。由于这些标签的实现以及如何首先解析 DTMManager 类然后由 DTMManager.newInstance 方法实例化,我们很快就遇到了一些性能问题。
DTMManager 类名称查找问题之前已记录在案,并通过设置com.sun.org.apache.xml.dtm.DTMManager
系统属性得到解决。
但是,一旦找到类名,该com.sun.org.apache.xml.internal.dtm.ObjectFactory.findProviderClass
方法就会要求(非空)类加载器加载类定义,并且它永远不会缓存结果!在 WebLogic 环境中,此操作非常昂贵,并且占用了我们很大一部分响应时间。
类定义永远不会被缓存是否有原因?有没有办法避免每次都加载类定义?
谢谢一堆。
更新可以观察到com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory
类的类似行为 - ClassLoader 在每次调用时重新加载类定义DTDDVFactory.newInstance
。