Speicherverwaltung auf Glassfish

Ich habe mehrere Hintergrundaufgaben, die auf meinem Glassfish-Server von ausgeführt werden@TimerService Instanzen. Ziel dieser Dienste ist es, Daten aus Dateien zu extrahieren und diese Daten in die Datenbank einzufügen.

Anfangs habe ich versucht, dies in JPA zu tun, aber das System kam viel zu leicht zum Stillstand. Jetzt habe ich den Prozess auf JDBC umgestellt, der weitaus reaktionsschneller ist. Es gibt jedoch immer noch enorme Speicherlecks auf dem Weg, die ich nicht genau bestimmen kann.

Jede Datei wird in einer Methode extrahiert, die ihre eigenen Transaktionen verwaltet (1 Datei = 1 Transaktion). Ich würde denken, dass, sobald diese Methode alle Variablen finalisiert, der Gültigkeitsbereich verliert und GC'ed wird, aber dies ist nicht der Fall. Nach sehr kurzer Zeit erlebe ichOutOfMemoryException.

Ich frage mich, ob, wie und warum Glassfish auf meine Variablen (die sehr schwere Objekte sind) verweist. Welche Einstellungen oder Methoden kann ich anwenden, um diese Speicherverluste zu minimieren?

Als Referenz verwende ich die Standardeinstellungen von Glassfish mit ein paar Änderungen:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage