2013-02-13 75 views
0

我正在使用Spring,Hibernate,Java 1.6等。 我有一个复杂的逻辑,其中包含多个Arralist和在方法中创建的地图。 将数据从数据库加载到列表中,然后进行操作以获取jsp页面的数据。 如果同一动作在该页面中快速执行并多次执行,则会频繁触发该动作。由于大量数据在列表和映射中处理,应用程序会抛出Java堆OutOfMemory。从Java OutOfMemory异常中恢复

如果我应用-Xms -Xmx,那么它在一定程度上会有所帮助,如果我的数据增长了这个选项将会松动到内存问题。 我想知道,有什么方法可以在我们操作并将它们传递给Model for jsp页面之后清除列表。

+3

'OutOfMemory'错误,不是例外,无法恢复。 – 2013-02-13 06:25:50

+0

为什么不尝试将数据处理成块? – Abubakkar 2013-02-13 06:30:28

+0

欢迎来到大数据的世界。试试像Hadoop,HBase或其他一些不太复杂的批处理解决方案,如Spring批处理。 – Prateek 2013-02-13 07:12:46

回答

0

尝试使用SoftReferences来处理内存中需要的大量资源。

组织缓存以从内存中释放不必要的内容。例如ehCache

0

你不能从OOM中恢复,因为你永远不知道它会在何时何地击中你。

尝试使用像google番石榴一样的懒惰集合来操纵数据而不创建额外的副本。使用游标和迭代器来避免存储在内存中的完整数据。

0

尝试使用分布式内存缓存解决方案,如-ehcache,Memcached,oracle一致性。