Ram Usage explodiert

Status
Nicht offen für weitere Antworten.
S

spinnerudi08

Gast
Hi

Ich habe folgendes Problem:

Zuerst mal die Methode, wo das Problem vermutlich entsteht:

Code:
private myTableModel createTableModel() {
        Collection data = null;
        
        try {
            data = ...hole hier eine riesige Collection...durchaus 20-30000 Datensätze möglich
        }
        catch (Exception e) {
            ...hier fange ich Exception ab, für Problem aber nicht relevant.
        }
        
        return new myTableModel(data);
    }

Also nun zum Problem:
Diese Methode holt viele Datensätze zu einer bestimmten Gruppe und gibt ein myTableModel mit diesen DAten zurück. Diese Methode wird jedes Mal aufgerufen, wenn der Benutzer eine andere Gruppe anklickt. Jedes Mal wird also eine neue Collection data mit all den Datensätze zur aktuellen Gruppe erstellt. Jedes Mal wird auch ein neues myTableModel erstellt, welches intern wiederum die Collection zwischenspeichert.
Das hat nun zur Folge, dass bei jedem Klick des Benutzers auf eine andere Gruppe, die RAM Usage extrem steigt.

Irgendwelche Tipps?
Sollte ich evtl. manuell jedes Mal eine Variable "löschen" ???

Wäre sehr froh für Tipps!
 

Pappenheimer++

Bekanntes Mitglied
Du meinst, dass die gleichen Collections dann mehrmals im Speicher liegen? Der Gargabe-Collector gibt nicht mehr referenzierten Speicher automatisch wieder frei. Möchtest du vllt etwas mehr Code posten?
 
S

spinnerudi08

Gast
Genau, das meinte ich eben auch. Aber die RAM Usage explodiert in die Höhe.

Gibt es ein Tool oder so, wo man beobachten kann, welche Variablen im Speicher liegen und das auch anzeigt, was der garbage collection so aufräumt??
 

Giftstachel

Bekanntes Mitglied
alternativ besteht natürlich auch die möglichkeit, einfach die nicht mehr benötigten objekte zu leeren, oder manuell zu zerstören...
wenn dir das hilft...
 
S

spinnerudi08

Gast
Also hab nun mit dem JProfiler das Ganze untersucht.

Jedes Mal, wenn folgende Methode gerufen wird, sehe ich, dass "Instance count" von java.lang.String deutlich steigt. Dies ist sehr wahrscheinlich mein Ressourcen-Fresser!?!?

Code:
private myTableModel createTableModel() {
        Collection data = null;
       
        try {
            data = delegate.listDatenByFilter(filter); //holt eine Collection mit ca. 20-30000 Datensätzen
        }
        catch (Exception e) {
            ...hier fange ich Exception ab, für Problem aber nicht relevant.
        }
       
        return new myTableModel(data);
}

Via delegate wird also die Methode listDatenByFilter(String) auf der Facade gerufen. Wie gesagt, bei jedem Aufruf explodiert RAM Usage in die Höhe.
Ändere ich diese Zeile wie folgt ab, besteht das Problem keineswegs!:
Code:
data=new java.util.ArrayList();

Also muss doch das Problem irgendwo an der Datenmenge liegen, welche bei erneutem Lesen nicht aus dem Ram gelöscht wird..!?

Die Methode listDatenByFilter(String) auf der Facade macht nichts anderes, als ein JDBC Query auszuführen und je Datensatz ein TransferObject zu erstellen und dieses dann in eine Collection abzulegen. Schliesslich habe ich eine Collection mit ca 20-30000 TransferObjects, welche ich wieder zurückgebe.

Besten Dank für eure Tipps!
 

Giftstachel

Bekanntes Mitglied
also ich weiß ja nicht, ob das bei dir programmtechnisch möglich, oder überlegenswer ist, aber hast du schon überlegt, die TransferObjecte temporär in eine andere DB, oder ähnliches zu schreiben, sodas du jeweils nur mit einem datensatz aus der DB arbeitest, und diesen dann wieder "zurückschiebst", und dir nur das holst, was du benötigst/angezeigt werden soll?

->achtung. macht das prog uU. durch viele HDDzugriffe langsam.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E usage Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben