Hallo,
ich habe ein kleines Problem mit dem Resultset aus java (java.sql.ResultSet).
Unzwar verwende ich dieses in einer eigenen Klasse um mir RecordSets zusammenzustellen und um darüber schneller einzelne Datensätze zu bearbeiten. Nachdem die Arbeit getan ist sollte ja rein theoretisch alles aus dem RAM verschwinden... dem ist aber nicht so.
Das ResultSet müllt mir den RAM so dermaßen voll das das Programm nach einiger Zeit komplett abstürzt.
Nun habe ich mir zum Test eine close() Methode geschrieben welche im ersten Ansatz die close() Methode vom ResultSet aufgerufen hat. In diesem Ansatz ist NICHTS passiert.
Dannach bin ich hingegangen und habe die Variable selbst einfach auf null gesetzt. Hier war schon eine deutliche Verbesserung zu erkennen, aber es ist immernoch einiges über geblieben und nun ist das Programm erst nach einigen Stunden abgestürzt.
Zuletzt bin ich hingegangen und habe noch Runtime.getRuntime().gc() aufgerufen nachdem ich das ResultSet Objekt auf null gesetzt habe und hiermit funktioniert es reibungslos. Es bleibt nichts mehr im RAM.. alles wird schön brav entsorgt.
Die Frage die mich nun sehr interessiert ist warum ich das überhaupt machen muss?
Ich bin eigentlich davon ausgegangen das ein Objekt nach Verschwinden des Sichtbarkeitsbereiches komplett gelöscht wird und somit gelöscht wird.. aber dem ist ja demnach nicht so.. warum? Versteh ich da etwas falsch?
Danke
ich habe ein kleines Problem mit dem Resultset aus java (java.sql.ResultSet).
Unzwar verwende ich dieses in einer eigenen Klasse um mir RecordSets zusammenzustellen und um darüber schneller einzelne Datensätze zu bearbeiten. Nachdem die Arbeit getan ist sollte ja rein theoretisch alles aus dem RAM verschwinden... dem ist aber nicht so.
Das ResultSet müllt mir den RAM so dermaßen voll das das Programm nach einiger Zeit komplett abstürzt.
Nun habe ich mir zum Test eine close() Methode geschrieben welche im ersten Ansatz die close() Methode vom ResultSet aufgerufen hat. In diesem Ansatz ist NICHTS passiert.
Dannach bin ich hingegangen und habe die Variable selbst einfach auf null gesetzt. Hier war schon eine deutliche Verbesserung zu erkennen, aber es ist immernoch einiges über geblieben und nun ist das Programm erst nach einigen Stunden abgestürzt.
Zuletzt bin ich hingegangen und habe noch Runtime.getRuntime().gc() aufgerufen nachdem ich das ResultSet Objekt auf null gesetzt habe und hiermit funktioniert es reibungslos. Es bleibt nichts mehr im RAM.. alles wird schön brav entsorgt.
Die Frage die mich nun sehr interessiert ist warum ich das überhaupt machen muss?
Ich bin eigentlich davon ausgegangen das ein Objekt nach Verschwinden des Sichtbarkeitsbereiches komplett gelöscht wird und somit gelöscht wird.. aber dem ist ja demnach nicht so.. warum? Versteh ich da etwas falsch?
Danke