在JavaEE应用程序中导出大量数据

在JavaEE应用程序中导出大量数据,java,performance,jakarta-ee,Java,Performance,Jakarta Ee,我正在开发基于搜索的Java EE应用程序,它非常简单,就像那里的任何搜索引擎一样,一个页面,允许用户搜索内容和分页以移动到下一组结果。现在我想提供在文本文件中导出数据的功能,但问题是当有非常大的数据要导出时,它会消耗大约100MB的JVM内存 请Java EE专家提供建议 我看了一下,但这对我没有多大帮助您很可能将整个数据保存在某种集合中,然后将其序列化为文本文件。正如您所注意到的那样,这可能适用于少量数据,但当数据量太大时,应用程序会束手无策。在这种情况下,这不是一种很好的方法,因为您永远不

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

请Java EE专家提供建议


我看了一下,但这对我没有多大帮助

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

请发布您的代码,您可能希望使用
OutputStream
并对内容进行流式处理。当前使用ArrayList完成,此列表保存所有数据。请发布您的代码,您可能希望使用
OutputStream
并对内容进行流式处理。当前使用ArrayList完成,此列表保存所有数据。请发布您的代码,您可能希望使用
OutputStream
并对内容进行流式处理。目前使用的是ArrayList,此列表保存所有数据。请发布您的代码,您可能希望使用
OutputStream
并对内容进行流式处理。目前使用的是ArrayList,此列表保存所有数据。