Gestión de la memoria en Glassfish

Tengo varias tareas en segundo plano que se ejecutan en mi servidor Glassfish implementado por@TimerService instancias. El objetivo de estos servicios es extraer datos de archivos e insertar esos datos en la base de datos.

Inicialmente intenté hacer esto en JPA, pero el sistema se estancó de manera muy fácil, ahora he convertido el proceso a JDBC, que es mucho más sensible. Sin embargo, todavía hay enormes pérdidas de memoria en algún lugar del camino que no puedo identificar.

Cada archivo se extrae con un método que administra sus propias transacciones (1 archivo = 1 transacción). Pienso que una vez que este método finalice todas las variables, se perderá el alcance y se hará una GC, pero este no es el caso. Después de un tiempo muy corto estoy experimentandoOutOfMemoryException.

Me pregunto si, cómo y por qué Glassfish mantendría una referencia a mis variables (que son objetos muy pesados). ¿Qué configuraciones o metodologías puedo aplicar para minimizar estas fugas de memoria?

Para referencia, estoy usando la configuración de stock de Glassfish con un par de modificaciones:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta