Управление памятью на Glassfish

У меня есть несколько фоновых задач на моем сервере Glassfish, реализованных@TimerService экземпляров. Целью этих служб является извлечение данных из файлов и вставка этих данных в базу данных.

Первоначально я пытался сделать это в JPA, но система зашла в тупик, я теперь преобразовал процесс в JDBC, который намного более отзывчив. Однако где-то на этом пути все еще есть огромные утечки памяти, которые я не могу точно определить.

Каждый файл извлекается методом, который управляет своими собственными транзакциями (1 файл = 1 транзакция). Я бы подумал, что, как только этот метод завершит работу, все переменные потеряют область видимости и станут GC-ed, но это не так. Через очень короткое время я испытываюOutOfMemoryException.

Мне интересно, если, как и почему Glassfish будет хранить ссылки на мои переменные (которые являются очень тяжелыми объектами). Какие настройки или методологии я могу применить, чтобы минимизировать эти утечки памяти?

Для справки я использую стандартные настройки Glassfish с парой модификаций:

-XX:+CMSPermGenSweepingEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:MaxPermSize=256m
–XmX1024m

Ответы на вопрос(1)

Ваш ответ на вопрос