0

我正在使用 Spring、Hibernate、Java 1.6 等。我有一个复杂的逻辑,它在一个方法中创建了多个 Arralists 和 Maps。数据从数据库加载到列表中,然后进行操作以使数据为 jsp 页面做好准备。如果从该页面快速多次执行相同的操作,则它会频繁地执行该操作。由于使用列表和映射处理大量数据,应用程序会抛出 Java Heap OutOfMemory。

如果我应用 -Xms -Xmx,那么它会在一定程度上有所帮助,如果我的数据增长,这个选项将失去内存问题。我想知道,一旦我们操作并将列表传递给 Jsp 页面的模型,有什么方法可以清除列表。

4

3 回答 3

1

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

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

于 2013-02-13T07:00:38.277 回答
0

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

于 2013-02-13T07:03:03.393 回答
0

尝试将 SoftReferences 用于内存中需要的一些大资源。

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

于 2013-02-13T06:36:14.933 回答