Gerenciamento de memória no Glassfish

Eu tenho várias tarefas em segundo plano em execução no meu servidor Glassfish implementado por@TimerService instâncias. O objetivo desses serviços é extrair dados de arquivos e inserir esses dados no banco de dados.

Eu tentei inicialmente fazer isso em JPA, mas o sistema parou muito facilmente, agora eu convertei o processo para JDBC, que é muito mais ágil. No entanto, ainda há enormes vazamentos de memória em algum lugar ao longo do caminho que eu não posso identificar.

Cada arquivo é extraído em um método que gerencia suas próprias transações (1 file = 1 transaction). Eu pensaria que, uma vez que este método finalize todas as variáveis, solta o escopo e será GC'ed, mas este não é o caso. Depois de um tempo muito curto, estou experimentandoOutOfMemoryException.

Eu estou querendo saber se, como e porque Glassfish estaria mantendo referência a minhas variáveis ​​(que são objetos muito pesados). Quais configurações ou metodologias posso aplicar para minimizar esses vazamentos de memória?

Para referência eu estou usando as configurações de estoque Glassfish com algumas modificações:

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

questionAnswers(1)

yourAnswerToTheQuestion