从Java OutOfMemory异常中恢复

从Java OutOfMemory异常中恢复,java,heap,out-of-memory,Java,Heap,Out Of Memory,我正在使用Spring、Hibernate、Java1.6等。 我有一个复杂的逻辑,在一个方法中创建了多个数组列表和映射。 数据从数据库加载到列表中,然后进行操作,以便为jsp页面准备好数据。 如果同一动作从该页面快速执行多次,则会频繁点击该动作。当使用列表和映射处理大量数据时,应用程序会将Java堆从内存中抛出 如果我应用-Xms-Xmx,那么它将在某种程度上有所帮助,如果我的数据增长,这个选项将因内存问题而松动。 我想知道,一旦我们操作了列表并将其传递给jsp页面模型,是否有任何方法可以清除

我正在使用Spring、Hibernate、Java1.6等。 我有一个复杂的逻辑,在一个方法中创建了多个数组列表和映射。 数据从数据库加载到列表中,然后进行操作,以便为jsp页面准备好数据。 如果同一动作从该页面快速执行多次,则会频繁点击该动作。当使用列表和映射处理大量数据时,应用程序会将Java堆从内存中抛出

如果我应用-Xms-Xmx,那么它将在某种程度上有所帮助,如果我的数据增长,这个选项将因内存问题而松动。
我想知道,一旦我们操作了列表并将其传递给jsp页面模型,是否有任何方法可以清除列表。

尝试使用SoftReferences获取内存中所需的一些大型资源


组织缓存以从内存中释放不必要的内容。例如,请参见

您无法从OOM中恢复,因为您永远不知道它会在何时何地击中您


尝试使用google的guava中的惰性集合来处理数据,而无需创建额外的副本。使用游标和迭代器避免存储在内存中的完整数据。

尝试使用分布式内存缓存解决方案,如-ehcache、Memcached、oracle coherence

OutOfMemory
是一个错误,不是异常,无法从中恢复。为什么不尝试将数据处理成块?欢迎来到大数据世界。尝试解决方案,如Hadoop、HBase或其他一些不太复杂的批处理解决方案,如SpringBatch。