Applet und JVM Speicher wieder freigeben

eusti

Grünschnabel
Hallo zusammen!

Ich brauche dringend Hilfe zu meinem Applet Speicherauslastungsproblem!
(OutOfMemory)
Ich habe ein Applet geschrieben, dass eine jTable beinhaltet in der
Daten aus einer Postgresql Datenbank angezeigt werden kann.
es sind max 30.000 Datensätze die in ein zweidimensionales Array
geschrieben werden.
Demnach sind es ca 30 mb Speicher die nach jeder Abfrage dazukommen.
Meine Frage ist, wie kann ich diesen Speicher wieder freigeben bevor ich neue
Daten abrufe und in das Array reinschreibe?
Ich hab schon alles Mögliche versucht:
Array überschreiben,System.gc(),destroy(),array löschen etc.
Nix funktioniert.
Ich weiss das man den Speicher der JVM hochsetzen kann.
Aber das ist nicht die Lösung meines Problems.
Es wäre super wenn mir hier jemand helfen könnte.

Gruß
Eusti
 
Hallo!

Nenn mir bitte einen Menschen, der mit 30.000 Datensaetzen auf einmal was anfangen kann... versuch die Informationen die du benoetigst durch eine entsprechende Abfrage Datenbankseitig zu aggregieren (Summen, Durchschnitt,etc.) und dann an den Client zu schicken.

Ansonsten koenntest du den mit dem Abfrageergebnis assozierten Speicher so wieder freigeben lassen, bzw. die entsprechenden Objekte fuer den GC freigeben lassen:
TabeleModel der Jtable auf null setzen bzw. clear() aufrufen.
ResultSet schliessen, Statement schliessen,
Keine Referenzen mehr auf das TableModel (oder welche Datenrepresentation du auch immer fuer deine Abfrageergebnisse hast) halten...

Gruss Tom
 
Hallo!
Vielen Dank für deine Hilfe!

Da gibt es zu meinem Unglück leider genug von!
Hab das mal ausprobiert, was du mir geschrieben hast.
Leider ohne Erfolg.
Der Speicher wird leider immer grösser.
Hab auch alle Verbindungen geschlossen und die Refernz auf das
TableModel entfernt.
Es muss doch eine Möglichkeit geben diesen Speicher wieder frei zu geben
ohne dass ich ständig das Browserfenster schliessen muss, oder?
Ich hoffe du hast da noch ne Idee.
Wieso kann ich das Array nicht einfach mit neuen Daten überschreiben?
Wieso erhöht sich der Speicher trotzdem immer wieder obwohl ich doch die alten Daten
überschreibe?

Gruß
Christian
 
Hallo Christian,

setze das Array vor dem füllen auf null und erstelle danach ein neues Array.
Code:
class MyApplet {

int[] array;

public void fill(){
array = null;
array = new int[30000];

... fülle Array mit den Daten

}

}

Vg Erdal
 
Zurück