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