我們繼承了一個應用程序(基於Java,運行在WebLogic 10.3.5上),它廣泛使用JSTL XML標記,特別是XPath選擇器。我們很快就遇到了一些性能問題,這是由於這些標記的實現以及DTMManager類是如何首先解析的,然後由DTMManager.newInstance方法實例化的。Xalan 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
類 - ClassLoader在每次調用DTDDVFactory.newInstance
時重新加載類定義。
哇,我後悔讓這個問題已晚... Xerces的很慢... VTD-XML是比Xerces好得多,無論是解析還是XPath ... – 2016-05-06 06:42:59