在JAVA EE Application中导出大量数据

时间:2014-01-31 13:58:05

标签: java performance java-ee

我正在研究基于搜索的Java EE应用程序,它就像任何搜索引擎一样非常简单,一个页面允许用户搜索内容和分页以移动到下一组结果。现在我想提供功能导出文本文件中的数据,但问题是当要导出非常大的数据时,它消耗大约100MB的JVM内存。

Java EE专家请指教?

我看了here,但这对我没什么帮助

2 个答案:

答案 0 :(得分:3)

您最有可能将整个数据保存在某种集合中,然后将其序列化为文本文件。正如您所注意到的那样,这可能适用于少量数据,但是当数据量太大时,您的应用程序就会瘫痪。在这种情况下,这不是一个好方法,因为你永远不会返回多少数据。

您应该将查询的结果流式传输到输出,即写入每个查询结果写入它,不需要临时保存它。您可以使用OutputStream的任何实现。如果要从servlet发送文件,则可能需要在设置正确的内容类型后直接写入servlet的输出流。

答案 1 :(得分:0)

每个会话100 MB,几乎没有同时用户。因此,您可以限制并发导出操作的数量,以确保不会耗尽内存;

有很多方法可以做到这一点,包括有限的Session EJB实例池(其他请求自动等待),相关类的静态变量中的计数器,数据库表(可以作为过去导出的日志加倍)操作),可能监视可用的内存。