Java-GC:die ältere generation wird größer und größer und kann nicht zurückgefordert werden

Schreibe ich meine servlet-Programm und jconsole verwenden und jmap überwachen des Speicher-status.Ich finde, dass wenn mein Programm läuft , der Speicher-Pool "PS Alte Gen" wird immer größer und größer und schließlich mein servlet nicht reagieren auf jede Anfrage.

Dies ist der shotcut meiner JConsole Ausgabe:

Java-GC:die ältere generation wird größer und größer und kann nicht zurückgefordert werden

Wenn ich auf "Ausführen GC" - Taste, passiert Nichts.

So , um die details zu sehen ,benutze ich jmap-dump details:

Java-GC:die ältere generation wird größer und größer und kann nicht zurückgefordert werden

Und das ist mein JConsole VM Inhaltsangabe Ausgabe:
Java-GC:die ältere generation wird größer und größer und kann nicht zurückgefordert werden
Jemand kann mir helfen raus zu bekommen was das problem sein kann?Ihr wissen , das GC "PS MarkSweep" und "PS Ausplündern" ist die Standard-GC für meine Server-JVM.

Danke.


Finde ich ein sehr komisches Phänomen:Während 15 Stunden von 18:00 Uhr gestern 09::00 von heute ,so scheint es, dass GC auf "PS Old-Gen" noch nie aufgetreten , das machen die verwendeten Speicher von der alten generation wird immer größer und größer.ich habe gerade manuell klicken Sie auf "Ausführen GC" - Schaltfläche ,es scheint, dass dieses GC ist sehr effektiv und beanspruchen viel Speicherplatz. Aber warum die Alte generation GC nicht automatisch geschehen, für eine so lange Zeit? Wir können sehen, dass vor 18:00 von gestern , die alte generation GC richtig funktioniert.
Java-GC:die ältere generation wird größer und größer und kann nicht zurückgefordert werden

  • Es scheint ziemlich klar, dass Sie eine große LinkedHashMap mit über 4 Millionen strings. Wenn ich du wäre, würde ich konzentrieren sich auf, herauszufinden, was die Karte ist, ob es gebraucht wird und, wenn es nicht ist, warum es beibehalten wird. (P. S. Es könnte sein, dass es mehrere LinkedHashMaps hinzufügen, dass bis auf die oben genannten. Dies ändert sich nicht an meine Ratschläge.)
  • Und vielen Dank für einen klar formulierten Frage. (+1)
  • Ein servlet wird nur einmal instanziert, so hat er erklärt-Attribut, alle threads werden in der Lage sein, es zu benutzen. Also, wenn Ihr servlet-Implementierung enthält eine große Sammlung, vielleicht sollten Sie prüfen, wie es wächst und wenn es zurückgesetzt werden kann.
  • Aber in meinem servlet, die ich nicht definieren statische Variablen oder Instanzvariablen.Alle meine Daten-intensiven Variablen sind definiert in der Methode.Bei der Methode zurückgegeben werden , diese Variablen sollten zurückgefordert werden,richtig?
  • Vielleicht eher, als eine große HashMap ist eine HashMap, die Punkte in eine HashMap, die Punkte in eine HashMap ... Oder etwas in der Natur.
InformationsquelleAutor wuchang | 2014-09-17
Schreibe einen Kommentar