即使堆空间大于文档大小,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 文档时”的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB:如何创建一个大小大于堆空间的表?

实际可用空间时的 java 堆空间

Java虚拟机八 分析Java堆

Eclipse 堆空间(内存不足错误)

内存不足错误,java堆空间

Worklight 6.2 wlapp 部署给出错误 java 堆空间