我们有一个应用程序,其中从存储的proc结果集创建XML字符串,并使用XSLT进行转换以返回到调用的servlet。这适用于较小的数据集,但导致大量数据的内存不足错误。在这种情况下,理想的解决方案是什么?
答案 0 :(得分:3)
通常,XSLT转换需要将整个数据集加载到内存中,因此最简单的方法是获得更多内存。
如果您可以重写XSLT,则可以使用XML流式转换,以便对数据进行增量处理。
答案 1 :(得分:1)
如果您正在处理整个XML文档,那么听起来您需要为Java堆分配更多内存。但这只能达到定义的最大堆大小。您知道合理的最大数据集大小还是无限制?
为什么需要数据库来生成XML?
答案 2 :(得分:1)
很少有重要事项需要注意。
您提到的功能很好,数据集较小,但内存较大,数据集较多。您需要确定是否创建了导致内存不足或在同一进程中传输数据集的数据集。
你正在做一些使许多物体留在记忆中的东西。重新检查您的代码并在使用后显式地使某些对象无效。这将使垃圾收集器的生活更轻松。使用JVM的MaxPermSize设置。这将为您提供额外的字符串空间。
这种方法将有一个限制,即使您能够为单个用户传输大型数据集,这可能会为多个用户提供outOfMemory。
可能适合您的建议。
在Asyncronous流程中打破此问题。创建大型数据集可以分离流程并下载该数据集的不同流程。
在使数据集可供下载的同时,您可以使用基于流的下载来很好地控制内存消耗。