即使堆空间大于文档大小,Java 堆空间错误也会抛出“在转换 550 mb 文档时”
Posted
技术标签:
【中文标题】即使堆空间大于文档大小,Java 堆空间错误也会抛出“在转换 550 mb 文档时”【英文标题】:Java heap space error is throwing " while transforming 550 mb document" eventhough heap space is higher than document size 【发布时间】:2014-04-01 02:29:54 【问题描述】:即使堆空间大于文档大小,“在转换 550 MB 文档时”也会引发 Java 堆空间错误。
我的代码使用
1.xsl:stylesheet of xslt transformation
2.net.sf.saxon.TransformerFactoryImpl
3.trans.transform(new StreamSource(file), result);
谢谢, 玛尼
【问题讨论】:
只是因为文档是 550Mb,转换/解析它可能需要更多... 我怎样才能知道转换需要多少时间 【参考方案1】:对于 Saxon,源文档作为树占用的空间通常是词法 XML 大小的 5 倍左右。当然,该比率可能会有所不同,具体取决于文档的复杂性。所以对于 550Mb,分配 3Gb 就足够了。启动 Java 时使用 -Xmx 选项分配足够的堆空间。
您已接近使用传统内存转换所能完成的极限,因此您可能希望了解进行流式转换的选项。有关这方面的信息,请参阅http://saxonica.com/documentation/#!sourcedocs/streaming
【讨论】:
嗨,Michael,感谢您的回复。我有堆空间 -Xms3072m -Xmx10240m。但错误仍然存在。 那么我认为您需要寻找不同的方法,例如流媒体。 (虽然通过堆分析首先了解内存的去向可能很有用。) 谢谢你迈克尔!..我将尝试使用流媒体解决此错误。以上是关于即使堆空间大于文档大小,Java 堆空间错误也会抛出“在转换 550 mb 文档时”的主要内容,如果未能解决你的问题,请参考以下文章