2013-05-05 52 views
1

我的程序有一個多線程環境,我無法控制線程的產卵,但是我使用的一些框架具有控制權。XSLT轉換:newTransformer與newTemplates相對於類加載

我發現使用newTemplates(XSLstreamsource)是線程安全的,而newTransformer(XSLstreamsource)不是。但是我真正想知道的是,如果這兩者之間在將實現類加載到JVM方面存在差異。

我現在面臨的問題是每調用一次(在不同的線程中)加載類,因此佔用燙髮存儲器部分的高度。

我想知道如果newTemplates只會加載一次該類,而不是newTransformer。或者是否有解決方案來避免每次都加載類?

回答

1

將「Templates」對象視爲已編譯的樣式表,將「Transformer」對象視爲已加載並準備好執行的樣式表。

你想重用Templates對象,如果你所能,讓你只編譯樣式表一次,但每個轉化創建新Transformer工作得很好,有很少的一點就是在重新使用(它允許串行重用,也就是在上一次完成後再撥打transform(),但這樣做沒有好處。)

+0

謝謝Michael和Mads。那麼,我認爲這兩者在彼爾姆內存消費方面沒有任何區別?我對嗎?順便說一句,使用SAXTransformer會導致較低的Perm Gen消耗? – 2013-05-06 02:20:41

+0

如果您關心內存,可能是因爲您正在處理大型源文檔。通常,源文檔樹將由Transformer擁有,並且假設您只對文檔進行一次轉換,則在Transformer發佈時它將被垃圾收集。使用SAXTransformer不可能有任何改變;處理器仍然會在內存中構建一棵樹。 – 2013-05-07 22:20:52