dee*_*ace 5 java xml xslt jaxp xalan
我在使用XSLT转换的java应用程序下工作.我有很多document()调用,所以有可能有java.lang.OutOfMemory异常(我实际上有),因为在每次调用document()函数之后,文档都会被缓存.
在http://xml.apache.org/xalan-j/faq.html#faq-N102F9,我读到可以增加堆内存大小,这在我的情况下不是解决方案.我也尝试使用似乎不支持的增量变换.
那么,有没有可能在使用document()函数时关闭jaxp中的文档缓存?
就像user1066037的回答一样,希望你可以切换到Saxon。Saxon 有一个名为 的扩展名saxon:discard-document。它有 PE 版、EE 版或 Saxon-B 版本。在这里搜索“Saxon-B”: http: //saxon.sourceforge.net/
来自撒克逊文档:
撒克逊:丢弃文档()
saxon:discard-document($doc as document-node()) ==> document-node()
此函数从 Saxon 的内部文档池中删除文档。该文档暂时保留在内存中,但当对文档树中节点的所有引用都超出范围时,Java 垃圾收集器将从内存中释放该文档。这样做的好处是可以释放内存,但缺点是如果在同一个转换过程中再次加载同一文档,则会从源文本中重新解析,并分配不同的节点标识符。该函数返回作为参数提供的文档节点,允许在诸如 select="saxon:discard-document(document('a.xml'))" 之类的调用中使用它。
如果您需要如何使用的示例saxon:discard-document,请告诉我,我可以发布一个。