【发布时间】:2012-04-28 19:12:08
【问题描述】:
我们继承了一个应用程序(基于 Java,在 WebLogic 10.3.5 上运行),它广泛使用 JSTL XML 标记,尤其是 XPath 选择器。由于这些标签的实现以及如何首先解析 DTMManager 类然后由 DTMManager.newInstance 方法实例化,我们很快就遇到了一些性能问题。
DTMManager 类名查找问题以前是documented,并通过设置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 类的类似行为 - 每次调用 DTDDVFactory.newInstance 时,ClassLoader 都会重新加载类定义。
【问题讨论】:
标签: java xml weblogic xerces xalan