In JVM gibt es vier allgemeine Algorithmen zur Müllsammlung:
Markierung von Algorithmus (Mark-Sweep);
Kopieren von Algorithmus (Kopieren);
Mark-Kompakt;
Generationssammlung;
Stellen wir es nacheinander vor:
1. Markierung von Algorithmus (Mark-Sweep)
Dies ist der grundlegendste Algorithmus zur Müllsammlung. Der Algorithmus ist in zwei Phasen unterteilt: "Markierung" und "Clearing": Erstens werden alle Objekte, die recycelt werden müssen, gekennzeichnet, und alle markierten Objekte werden nach Abschluss der Markierung einheitlich recycelt. Die Hauptnachteile sind zwei: Einer ist das Effizienzproblem, und die Effizienz der Markierung und Reinigung ist nicht hoch. Das andere ist das Raumproblem, nachdem die Markierung gelöscht wurde, wird eine große Anzahl diskontinuierlicher Speicherfragmente erzeugt. Zu viele Weltraumfragmente können bei der Zuordnung großer Objekte unzureichend großen, kontinuierlichen Raum verursachen, und eine weitere Müllsammlung muss im Voraus ausgelöst werden.
Markalgorithmus-Diagramm
2. Kopieren von Algorithmus (Kopieren)
Um das Effizienzproblem mit dem Algorithmus "Kopieren" zu lösen, unterteilt es den verfügbaren Speicher in zwei Blöcke derselben Größe. Verwenden Sie jeweils nur ein Stück. Wenn ein Stück Platz aufgebraucht wird, kopieren Sie das noch überflutete Objekt in ein anderes Stück und reinigen Sie dann den neu verwendeten Speicherraum gleichzeitig. Dies ermöglicht es, jedes Mal eines der Teile zu recyceln, so dass bei der Zuweisung von Gedächtnissen nicht in Betracht gezogen werden müssen. Einfache Implementierung und effizienter Betrieb. Die Kosten dieses Algorithmus sind jedoch, den Speicher auf die Hälfte des Originals zu reduzieren, was etwas zu teuer ist. Tatsächlich leben und sterben 98% der Objekte in der neuen Generation, sodass das Gedächtnis nicht in einem Verhältnis von 1: 1 unterteilt wird, sondern das Gedächtnis in einen größeren Edenraum und zwei kleinere Überlebenderäume unter Verwendung des Eden -Raums und eines der Überlebendenräume unterteilt. Kopieren Sie beim Recycling die noch überfluteten Objekte in Eden und Survivor zu einem anderen Suivivor und räumen schließlich den Raum von Eden und dem neu verwendeten Überlebenden auf.
Kopieren Sie Algorithmus -Diagramm
3. Mark-Compact
Wenn die Überlebensrate von Objekten hoch ist, muss der Replikations- und Sammelalgorithmus mehr Replikationsvorgänge durchführen, und die Effizienz wird niedriger. Noch wichtiger ist, wenn Sie nicht 50% des Raums verschwenden möchten, müssen Sie zusätzlichen Raum haben, um Garantien für die extreme Situation zuzuweisen, in der alle Objekte im Halbzonenspeicher zu 100% lebendig sind. Dieser Algorithmus kann daher nicht direkt in älteren Menschen verwendet werden.
Daher schlugen die Menschen einen weiteren "Mark-Kompakt" -Algorithmus vor. Da Objekte bei älteren Menschen einen langen Überlebenszyklus haben, schlugen einige Menschen den "Mark-Compact" -Algorithmus vor. Der Markierungsprozess ist der gleiche wie "Markierung", aber während die überlebenden Objekte sortiert werden, die den fragmentierten Raum verringern können, werden die überlebenden Objekte sortiert.
Mark-Organisierungsalgorithmus-Diagramm
4. Generationensammlung
Derzeit übernimmt die Müllsammlung für kommerzielle virtuelle Maschinen den Algorithmus "Generationskollektion". In diesem Algorithmus gibt es keine neue Idee, aber das Gedächtnis ist gemäß den verschiedenen Überlebenszyklen des Objekts in mehrere Stücke unterteilt. Im Allgemeinen sind Java -Haufen in die neue Generation und die alte Generation unterteilt, so dass der am besten geeignete Sammelalgorithmus gemäß den Eigenschaften jeder Generation verwendet werden kann. In der neuen Generation werden jedes Mal, wenn eine Müllsammlung gesammelt wird, eine große Anzahl von Objekten tot und nur eine kleine Anzahl überlebt. Verwenden Sie dann den Kopieralgorithmus, und die Sammlung kann mit einer geringen Menge an Kopierkosten abgeschlossen werden. Bei älteren Menschen, da die Überlebensrate von Objekten hoch ist und der Zyklus lang ist, wird der "Mark-Tidy" oder "Mark-Clear" -Algorithmus verwendet, um ihn zu recyceln.
Die obige Einführung in gemeinsame Garbage Collection -Algorithmen in JVM ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.