Ну ...
Многолетний опыт работы с Java и базами данных ( пример post различия в Oracle PostgresSQL MySQL>) научил меня, что драйверы JDBC, которые мы используем при выполнении этой работы, часто имеют проблемы.
У меня есть один фрагмент кода, который должен оставаться подключенным к базе данных 24/7, и из-за утечки памяти драйвера JVM всегда будет задыхаться в какой-то момент. Итак, я написал код, чтобы перехватить конкретное выброшенное исключение, а затем предпринять все более радикальные действия, в том числе разорвать соединение, переподключить и даже перезапустить JVM в отчаянном состоянии, ничего не помогло, чтобы устранить проблему. Какая боль, чтобы написать это, но она работала, пока поставщик СУБД не выпустил новый драйвер JDBC, который не вызывал проблемы ... На самом деле я просто оставил код на месте, на всякий случай!
... Значит, вы ничего не делаете.
Обратите внимание, что вызов сборщика мусора был одной из стратегий, которые я использовал, но метрики показали, что это редко помогает.
Кроме того, это может быть не совсем понятно, но ResultSets поддерживает постоянное соединение с самим механизмом базы данных, во многих случаях (если явно не указано иное), двунаправленным, даже если вы просто читаете. И некоторые драйверы JDBC позволяют запрашивать однонаправленное соединение, но лгать и возвращать двунаправленное соединение! Осторожно с этим!
Таким образом, рекомендуется выгрузить объекты ResultSet в другие объекты для хранения значений и как можно скорее удалить сами объекты ResultSet.
Удачи.
RTIII