2016-05-02 10 views
0

ich gegoogelt und herausgefunden, dass die meisten Artikel sagte, dassWann wurde Minor GC ausgelöst?

‚Minor GC wird ausgelöst, immer wenn JVM nicht in der Lage ist Platz für ein neues Objekt zuweisen‘

Aber vom VisualVM, fand ich die kleine gc passiert sehr häufig. Ich kann sehen, dass der Eden-Raum reklamiert wird, dann wird nicht-leer eins von so, s1 wird gelöscht. Also ich denke, die kleine GC wird nicht ausgelöst, wenn die Eden-Generation voll ist. enter image description here

+1

Mögliche Duplikate von [Was löst eine vollständige Garbage Collection in Java?] (Http://stackoverflow.com/questions/9546392/what-triggers-a-full-garbage-collection-in-java) – Ducaz035

+0

Aber ich war fragen, wenn der kleine gc ausgelöst wurde, nicht voll gc. –

Antwort

2

nach dem Diagramm Sie die Gründe für kleinere GC folgende beiliegen:

1.In der Graphen ist mLokal hoch für eine lange Zeit, so dass diese auf die volle GC führt, die intern zu kleineren GC führt.

2.Und ein weiterer Punkt ist, schauen Sie nicht auf das Diagramm in der linken Seite wegen der zugewiesen, verpflichtet, verwendet Speicher können wir nicht sagen, wenn der GC genau vorkommt, so auf der rechten Seite von das Diagramm, wenn festgeschriebener Speicher im Eden-Raum gleich dem verwendeten Speicher ist, dann tritt ein kleinerer GC auf.

3.So schließlich geringfügige GC wegen 1 und 2 Gründen alternativ auftreten.

0

Die Zuweisung neuer Objekte geschieht in einer Eden-Region; Wenn die Eden-Region voll ist, werden Überlebende in den Überlebenden-Raum kopiert und der Rest des Eden-Raums wird weggeworfen. Wenn der Survivor-Raum voll ist, werden die Objekte in den anderen Survivor-Bereich kopiert (S0 < -> S1), und nach einer bestimmten Anzahl von Kopien (3) werden die fortgesetzten Überlebenden auf den Haufen kopiert. Dies passiert die ganze Zeit, wenn Sie Objekte zuweisen. Ein Haupt-GC ist, wenn der volle Heap nach Objekten durchsucht wird und ausgelöst wird, wenn es keinen Platz mehr gibt, um Überlebende in den Haupt-Heap zu kopieren.