我们继承了一个应用程序(基于Java,运行在WebLogic 10.3.5上),它广泛使用了JSTL标记,特别是XPath选择器。由于这些标记的实现以及如何首先解析DTMManager类,然后由DTMManager.newInstance方法实例化,我们很快就遇到了一些性能问题。
DTMManager类名查找问题以前是documented,通过设置com.sun.org.apache.xml.dtm.DTMManager系统属性解决了这个问题。
但是,一旦找到了类名,com.sun.org.apache.xml.internal.dtm.ObjectFactory.findProviderClass方法就要求( null)类加载器加载类定义,并且它永远不会缓存结果!在WebLogic环境中,这个操作非常昂贵,占用了我们很大一部分的响应时间。
为什么没有缓存类定义?是否有办法避免每次加载类定义?
谢谢一堆。
更新对于com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory类可以观察到类似的行为-- ClassLoader在每次调用DTDDVFactory.newInstance时都会重新加载类定义。
发布于 2012-06-13 19:25:21
除了避免这些标签的广泛使用之外,似乎没有什么可以做的。我们重构了这个代码部分:
。
只是表明在JSP中执行XML解析不是一个特别好的主意.
https://stackoverflow.com/questions/10366695
复制相似问题