Я работаю с программой, которая выполняет длинные SQL-запросы и сохраняет обработанные результаты в HashMap. В настоящее время, чтобы обойти медленное время выполнения каждого из 20-200 запросов, я использую фиксированный пул потоков и настраиваемый вызываемый объект для поиска. В результате каждый вызываемый объект создает локальную копию данных, которые затем возвращаются в основную программу для включения в отчет.
Я заметил, что 100 отчетов о запросах, которые раньше выполнялись без проблем, теперь приводят к нехватке памяти. Я предполагаю, что, поскольку эти вызываемые объекты создают свою собственную копию данных, я удваиваю использование памяти, когда объединяю их в другой большой HashMap. Я понимаю, что мог бы попытаться заставить сборщик мусора работать, пытаясь уменьшить область действия вызываемой таблицы, но такой уровень реструктуризации на самом деле не то, что я хочу сделать, если его можно избежать.
Могу ли я улучшить использование памяти, заменив callables runnables, которые вместо сохранения данных записывают их в параллельный HashMap? Или это звучит так, будто у меня другая проблема?