Arbeitsspeicher problem

Tiega

Mitglied
Hey Leute,

bin gerade an einer Account Verwaltung dran und mir ist gleich aufgefallen das bei jedem wechsel der Ansicht mehr Arbeitsspeicher verbraucht wird....

Java:
 private void SuchenJLabelMouseClicked(java.awt.event.MouseEvent evt) {                                          
        getContentPane().remove(inhaltJPanel);
        inhaltJPanel.removeAll();
        inhaltJPanel = new SucheModul();
        getContentPane().add(inhaltJPanel);
        validate();
    }                                         

    private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {
        getContentPane().remove(inhaltJPanel);
        inhaltJPanel.removeAll();
        inhaltJPanel = new AccountModul();
        getContentPane().add(inhaltJPanel);
        validate();
    }

was meiner meinung nach zurückzuführend ist weil ich jedesmal ein neues Objekt erzeuge....
Aber wenn ich diese einmal lade und zwar soo...

Java:
 private void SuchenJLabelMouseClicked(java.awt.event.MouseEvent evt) {                                          
        getContentPane().remove(inhaltJPanel);
        inhaltJPanel.removeAll();
        inhaltJPanel = suche;
        getContentPane().add(inhaltJPanel);
        validate();
    }                                         

    private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {
        getContentPane().remove(inhaltJPanel);
        inhaltJPanel.removeAll();
        inhaltJPanel = account;
        getContentPane().add(inhaltJPanel);
        validate();
    }

private SucheModul suche = New SucheModul();
private AccountModul account= New AccountModul();

läd der das Panel nur 1 mal und dann nicht mehr. Ich weiß aber nicht wo da das problem ist.
Könnt ihr mir helfen?

mfg
 
Ich weiss zwar jetzt auch nicht was du ändern kannst, aber wenn du neue Objekte erstellst und die alten ungültig werden, heisst das nicht unbedingt dass dein Programm mehr Arbeitsspeicher braucht. Es heisst nur dass der Garbage Collector noch nicht den unnötigen Speicher frei gegeben hat.

Zum Problem selbst kann ich nicht viel sagen, da ich mich mit Swing nicht wirklich auskenne.
 
ja ich hab auch gedacht das regelt der Garbage Collector aber iwie nicht... hab einfach mal ne schleife eingebaut das der wechsel 100 mal aufgeführt wird. Schon hab ich 50mb mehr was das programm braucht... und das ist es ja irgendwie nicht... und wenn ich das ein paarmal mache ist irgendwann ende^^
 
System.gc() hat leider nicht geholfen

jvisualvm.exe zeigt an das bei ungefähr 300mal öffnen eines Panels bzw wechseln zwischen den Panels der Heap auf die 100MB zugeht 🙁

und der PermGen wird weniger als 10MB?!

sind das die werte die du brauchst hab das tool noch nie benuzt.
 
da das Programm für ein Großprojekt "geplant ist"... und ich find die frage blöd.... ich hab mal gelernt zu sauberem Programmieren gehört auch den Speicherbedarf unter Kontrolle zu haben...
 
Soweit ich es verstanden, wird der Garbage Collector erst dann aktiv, wenn Speicher wirklich benötigt wird und nicht, wenn ein Objekt keine Referenz mehr hat. Der Garbage Collector und die Speicherverwaltung bei Java sind mir jedoch immer noch ein Rätsel ^^
Wenn wer einen exellenten Link oder eine Aufklärung, wie er funktioniert etc. schickt, wäre cool 😀
 
nein der räumt auf sobald keine Referenz mehr besteht... sonst würde mal in Collections ja noch auf alte Daten zugreifen können, soweit ich das richtig verstanden habe.

hab jetzt mal folgende Seite studiert

Vom Speicherverbrauch beim Programmieren

aber die sagen auch nur mal sollte "new" nicht zu oft verwenden bzw nur wenn es nötig ist. Aber dann kann ich ja nurnoch 1 mal die Ansicht wechseln.
 
nein der räumt auf sobald keine Referenz mehr besteht... sonst würde mal in Collections ja noch auf alte Daten zugreifen können, soweit ich das richtig verstanden habe.
Meldanor hat recht, der GC räumt erst auf wenn es wirklich nötig ist, kann man aber konfigurieren, neure VMs bieten Verbesserungen, Multiprozessorsysteme kommen oft besser damit zurecht wenn man ein neues Objekt erstellt anstatt ein vorhandenes zu synchronisieren, wichtig ist dass der Gültigkeitsbereich so klein wie möglich ist.

@Tiega
Wenn du schon VIsualVM nutzt, könntest du dir ja auch gleich ansehen welche Objekte da den Speicher belegen 😉
 
dispose() ist nur auf frames bzw Window anwendbar und nicht auf das Panel, ich muss doch irgendwie die Objekte aus dem Heap kriegen.

Ich hab ja schon eine Idee vorgeschlagen, warum funktioniert die eigentlich nicht wie erwünscht?

Meldanor hat recht, der GC räumt erst auf wenn es wirklich nötig ist, kann man aber konfigurieren, neure VMs bieten Verbesserungen, Multiprozessorsysteme kommen oft besser damit zurecht wenn man ein neues Objekt erstellt anstatt ein vorhandenes zu synchronisieren, wichtig ist dass der Gültigkeitsbereich so klein wie möglich ist.

@Tiega
Wenn du schon VIsualVM nutzt, könntest du dir ja auch gleich ansehen welche Objekte da den Speicher belegen 😉

Ich benutz Netbeans keine ahnung wie man das da nachgucken kann benutz das erst seit gestern und es ist ja offensichtlich welche Objekte dafür verantwortlich sind oder?
 
Zuletzt bearbeitet:
Meldanor hat recht, der GC räumt erst auf wenn es wirklich nötig ist, kann man aber konfigurieren, neure VMs bieten Verbesserungen, Multiprozessorsysteme kommen oft besser damit zurecht wenn man ein neues Objekt erstellt anstatt ein vorhandenes zu synchronisieren, wichtig ist dass der Gültigkeitsbereich so klein wie möglich ist.

@Tiega
Wenn du schon VIsualVM nutzt, könntest du dir ja auch gleich ansehen welche Objekte da den Speicher belegen 😉

Ich benutz Netbeans keine ahnung wie man das da nachgucken kann benutz das erst seit gestern und es ist ja offensichtlich welche Objekte dafür verantwortlich sind oder?
 
Zuletzt bearbeitet:

Zurück
Oben