首先,让我声明我完全不懂XSLT。我被分配了一个任务来调查在XSLT处理期间发生的Java OutOfMemory异常的一些JVM dump。
我发现OutOfMemory是发生在递归XSLT处理过程中(我们使用XALAN)。
令人震惊的是,该递归深度超过了100,000次调用。
在什么情况下,在XSLT处理期间进行这样深的递归才是可接受的呢?
请注意,线程堆栈跟踪大约有300k行,并且与此变体充斥着,直到OutOfMemory发生为止:
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))