我正在使用一个运行冗长的 SQL 查询并将处理后的结果存储在 HashMap 中的程序。目前,为了解决每个 20-200 个查询的缓慢执行时间,我使用一个固定的线程池和一个自定义的可调用来进行搜索。因此,每个可调用对象都会创建数据的本地副本,然后将其返回到主程序以包含在报告中。
我注意到过去运行没有问题的 100 个查询报告现在导致我内存不足。我的猜测是,因为这些可调用对象正在创建自己的数据副本,所以当我将它们加入另一个大型 HashMap 时,内存使用量会增加一倍。我意识到我可以尝试通过减小可调用表的范围来哄垃圾收集器运行,但是如果可以避免的话,这种级别的重组并不是我真正想要做的。
我可以通过将可调用对象替换为可运行对象而不是存储数据,而是将其写入并发 HashMap 来提高内存使用率吗?还是听起来我这里有其他问题?