【发布时间】:2011-08-31 14:51:36
【问题描述】:
我正在使用一个运行冗长的 SQL 查询并将处理后的结果存储在 HashMap 中的程序。目前,为了解决每个 20-200 个查询的缓慢执行时间,我使用一个固定的线程池和一个自定义的可调用来进行搜索。因此,每个可调用对象都会创建数据的本地副本,然后将其返回到主程序以包含在报告中。
我注意到过去运行没有问题的 100 个查询报告现在导致我内存不足。我的猜测是,因为这些可调用对象正在创建自己的数据副本,所以当我将它们加入另一个大型 HashMap 时,内存使用量会增加一倍。我意识到我可以尝试通过缩小可调用表的范围来哄骗垃圾收集器运行,但是如果可以避免的话,这种级别的重组并不是我真正想要做的。
我是否可以通过将可调用对象替换为可运行对象而不是存储数据,将其写入并发 HashMap 来提高内存使用率?还是听起来我这里有其他问题?
【问题讨论】:
-
我想我可能已经找到了一种更简单的方法来削减它,但我仍然对如上所述的进一步优化非常感兴趣。我注意到,当我编写报告时,我的 xml 编写器创建了一个包含另一个地图副本的文件。通过在将映射条目写入文件时删除它们,我应该能够减少更多。有趣的是,这样的小事竟然会溜走。
标签: java memory-management hashmap threadpool concurrenthashmap