首先我要指出,我没有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