And*_*ndy 5 java xslt heap xalan
我的项目有一个报告模块,它以 XML 的形式从数据库收集数据,并在其上运行 XSLT 以生成用户所需的报告格式。此时的选项是 HTML 和 CSV。
我们使用 Java 和 Xalan 与数据进行所有交互。
不好的部分是用户可以请求的这些报告之一仅为 XML 部分的 143MB(大约 430,000 条记录)。将其转换为 HTML 时,我用尽了堆空间,最多为堆保留了 4096G。这是无法接受的。
看来问题简直是数据太多了,但我不禁想到,除了限制客户,无法满足功能需求之外,还有更好的处理方式。
我很高兴根据需要提供更多信息,但我不能透露太多关于该项目的信息,因为我相信你们大多数人都理解。此外,答案是肯定的;我同时需要所有数据:我无法对其进行分页。
谢谢
编辑
我使用的所有转换类都在 javax.xml.transform 包中。实现如下所示:
final Transformer transformer =
TransformerFactory.newInstance().newTransformer(
new StreamSource(new StringReader(xsl)));
final StringWriter outWriter = new StringWriter();
transformer.transform(
new StreamSource(new StringReader(xml)), new StreamResult(outWriter));
return outWriter.toString();
Run Code Online (Sandbox Code Playgroud)
如果可能,我希望 XSLT 保持原样。StreamSource做事的方法应该允许我在处理一些数据时对它进行 GC,但我不确定 XSLT(函数等)有哪些限制,这可能需要它进行适当的清理。如果有人可以向我指出详细说明这些限制的资源,那将非常有帮助。