【发布时间】:2017-07-19 04:40:24
【问题描述】:
我需要使用Struts2 和Freemarker 将数据转储到一个大的xml(50 ~ 500 Mb)中:
<?xml version="1.0" encoding="UTF-8"?>
<documents>
<#list collection as document>
<document>
...
</document>
<#if document_index % 100 == 0>
<#flush/>
</#if>
</#list>
</document>
由于collection 可能很大,它已经实现了一个内部逻辑来获取部分数据,只要有可用数据,就可以使用它并再次获取。
问题似乎与 XML 的缓冲区有关:有时应用程序崩溃(java.lang.OutOfMemoryError)。
每 100 个文档调用一次 Freemarker flush,但我不知道是否真的发生了刷新,根据 documentation,这只是嵌入软件的指示 (Strut2 + Tomcat7)。
关于如何强制刷新有什么建议吗?
JVM 处理了大约 1~2 Gb 的堆内存,也许只是内存问题?
也许org.apache.struts2.views.freemarker.FreemarkerManager 可以为此目的适当调整?
【问题讨论】:
标签: java tomcat struts2 freemarker flush