2014-01-31 33 views
0

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

Java EE高手请指教?

我看here但对我来说并不

+4

请发布您的代码,您可能需要使用'OutputStream'并传输内容。 –

+0

目前使用ArrayList完成,此列表包含所有数据。 – malatesh

回答

3

你最有可能节省一些集合类的整个数据,然后将其序列化到一个文本文件中没什么太大的帮助。正如你已经注意到的那样 - 可能适用于少量数据,但是当数据量太大时,你的应用程序就会瘫痪。在这种情况下,这不是一个好的方法,因为你永远不会返回多少数据。

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

+1

感谢您的回答 – malatesh

0

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

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

+0

感谢您的回答 – malatesh