从数据库数据生成PDF时FOP - OutofMemoryError

时间:2012-04-29 05:11:03

标签: java database pdf-generation apache-fop

我是一名新软件开发人员,真的需要一些帮助。我被赋予了使用FOP从数据库中的数据生成PDF的任务。我编写了程序并且它可以工作,但不是在所有情况下都可以。只要我检索的数据行数量相当小,一切都可以正常工作 - 最多不超过10000行。当我尝试为大于10000行的数据集生成报告时,我得到内存不足错误(Java堆空间)。

从数据库中读取的代码:

while (rs.next()) {
   EMP_ID = rs.getString("EMP_ID");
   EMP_NAME = rs.getString("EMP_NAME");
   EMP_SALARY = rs.getString("EMP_SALARY");
   EMP_PROJECT = rs.getString("EMP_PROJECT");
   EMP_POSITION = rs.getString("EMP_POSITION");
   team.addMember(d.DataGetSet(EMP_ID, EMP_NAME, EMP_SALARY, EMP_PROJECT,
         EMP_POSITION));
}

我将程序的内存增加到2GB,但仍然会发生错误。任何帮助解决这个问题将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你的内存不足而且你不知道从哪里开始,我建议采用分而治之的方法来引导你走向正确的区域。例如,注释掉创建PDF的代码然后再次测试。内存耗尽吗?如果是这样,请注释掉添加到数组的部分(但保持对d.DataGetSet的调用)并再次测试。这有望让你知道攻击的位置,而不必学习如何分析Java内存(它有自己的学习曲线)。

如果您仍未到达任何地方,请尝试使用JVisualVM(JDK的一部分)。在运行时将其连接到应用程序并执行“堆转储”。这可能会帮助你发现内存上的内容。

最后 - 你确定你提高了记忆力并且生效了吗?只需仔细检查。