首先我要指出,我沒有XSLT的線索可言。我獲得了一項任務,以調查在XSLT處理期間發生的Java OutOfMemory異常的一些JVM轉儲。XSLT處理遞歸深度
我發現,內存溢出的遞歸XSLT處理(我們使用XALAN)過程中發生。
我發現令人震驚的是,遞歸> 100萬個電話深。
什麼情況下可以遞歸此深XSLT處理過程中是可以接受的?
注意,線程堆棧跟蹤約30萬線長,充滿直到內存不足發生的那一刻起的這種變化:
at org/apache/xalan/transformer/TransformerImpl.executeChildTemplates(Bytecode PC:150(Compiled Code))
at org/apache/xalan/templates/ElemElement.execute(Bytecode PC:352(Compiled Code))
at org/apache/xalan/transformer/TransformerImpl.executeChildTemplates(Bytecode PC:150(Compiled Code))
可以創建導致無限遞歸的轉換。你可以發佈你的模板? – dfb 2011-03-25 17:21:20
這就是爲什麼這被稱爲stackoverflow ... – 2011-03-25 22:39:34
好問題,+1。請參閱我的答案,以詳細解釋遞歸處理引起堆棧覆蓋的原因以及解決問題的兩種解決方案。 – 2011-03-26 17:44:41