Zum Hauptinhalt springen

Was ist Java Garbage Collection? Zusammenfassung der Konzepte Mark und Sweep, Young, Old, Perm

  • Bei der Java-Programmierung hört man oft den Begriff Garbage Collection. Obwohl die Entwicklung ohne dieses Wissen in den frühen Entwicklungsstadien möglich ist, ist es gut zu wissen, um die Leistung zu optimieren oder Speicherlecks zu verhindern.
  • Dies ist eines der häufig gestellten Themen in Interviews bei Unternehmen, die Java einsetzen.
  • In diesem Dokument fassen wir die Java Garbage Collection zusammen, damit Sie sie leicht verstehen können.
  • Dies ist eine kurze Zusammenfassung, die Ihnen helfen soll, unbekannte Konzepte zu verstehen. Wir empfehlen Ihnen daher, andere Artikel zu lesen, um detaillierte Informationen zu erhalten.

Was ist Garbage Collection?

  • Der Name Garbage Collection bedeutet Sammlung von Müll. Sammelt automatisch ungenutzten Speicher
    • Ungenutzter Speicher: Speicher, der nicht mehr verwendet wird.
    • Speichersammlung: Gibt ungenutzten Speicher frei, sodass er wieder verwendet werden kann.
  • Die Java-Speicherverwaltung erfolgt über JVM.
    • In bestehenden Sprachen musste der Programmierer die Speicherzuweisung und -freigabe direkt verwalten. Wenn der Speicher nicht ordnungsgemäß freigegeben wird, sammelt sich weiterhin ungenutzter Speicher an und es kommt zu einem Speicherverlust.
    • JVM ist eine virtuelle Maschine, verarbeitet die Speicherzuweisung und -freigabe automatisch, ohne dass sich der Benutzer darum kümmern muss
    • Geben Sie die von der JVM zu verwendende Speichergröße an, indem Sie beim Ausführen des Programms eine JVM-Option angeben.
    • Speicherlecks auf Betriebssystemebene werden verhindert, indem nicht direkt auf den Speicher auf Betriebssystemebene zugegriffen wird.
  • Garbage Collection sichert den Speicher, indem nicht erreichbare Objekte aus dem Heap-**Bereich entfernt werden.
    • Nicht erreichbares Objekt: ein Objekt, auf das nicht mehr verwiesen wird

Was ist Mark and Sweep?

  • charakteristisch
    • Die Garbage Collection erfolgt mit der Mark-and-Sweep-Methode
    • Der Speicherstatus nach der Garbage Collection ist ein Zustand, in dem der Speicherplatz gesichert ist.

Markieren

  • Findet und markiert ein erreichbares Objekt. Der Garbage Collector durchsucht alle Variablen im Stapel, um herauszufinden, auf welches Objekt die einzelnen Variablen verweisen.
  • Alle Threads werden für die Mark-Arbeit gestoppt, dies wird als Stop the World bezeichnet
  • Aus den oben genannten Gründen können Sie die Speicherbereinigung explizit durch Aufruf von System.gc() veranlassen, dies wird jedoch nicht empfohlen.

Fegen

  • charakteristisch
    • Entfernen Sie nicht markierte Objekte. Nicht erreichbares Objekt entfernen

Heap-Bereich – Jung (Eden, Survivor), Alt, Perm

  • Der Heap-Bereich besteht aus den Bereichen „Junge Generation“, „Alte Generation“ und „Perm“.
  • Besteht aus insgesamt 5 Bereichen
    • Junge Generation: Eden, Überlebender 0, Überlebender 1
    • Alte Generation
    • Perm-Region

Bild

Junge Generation

  • Bestehend aus den Bereichen Eden, Survivor 0 und Survivor 1
  • Eden-Reich
    • Wo sich das neu erstellte Objekt befindet
    • Minor GC tritt auf, wenn der Eden-Bereich voll ist
  • Überlebenszone
    • Wo sich überlebende Objekte im Eden-Reich befinden
    • Es gibt zwei Bereiche, S0 und S1, von denen einer leer ist und der andere überlebende Objekte enthält.
    • Verschieben Sie überlebende Objekte aus dem Eden-Bereich und dem nicht leeren Survivor-Bereich in den leeren Survivor-Bereich.
    • Der Alterswert erhöht sich, wenn man von einem Überlebensgebiet in ein anderes Überlebensgebiet wechselt.
    • Bewegen Sie sich wie folgt
      • Es gibt überlebende Objekte in S0 und S1 ist leer -> Verschieben Sie den Eden-Bereich und die überlebenden Objekte in S0 nach S1
      • Es gibt überlebende Objekte in S1 und S0 ist leer -> Verschieben Sie den Eden-Bereich und die überlebenden Objekte in S1 nach S0
    • Beim Bewegen erhöht sich der Alterswert und überlebende Objekte werden in einen anderen Überlebensbereich verschoben.

Alte Generation

  • charakteristisch
    • Objekte, die in der jungen Generation überleben, werden in die alte Generation verschoben, wenn ihr Alterswert einen bestimmten Wert überschreitet.
    • Der obige Schritt wird als Promotion bezeichnet

Dauerwellenzone

  • charakteristisch
    • Wo Metadaten, Klasseninformationen usw. gespeichert werden
    • Ab Java 8 in Metaspace geändert

Minor GC & Major GC & Full GC

  • GC ist je nach organisiertem Heap-Bereich in Minor GC, Major GC und Full GC unterteilt.

Minor G.C.

  • charakteristisch
    • GC kommt in der jungen Generation vor
    • Verschieben Sie überlebende Objekte aus der Eden-Zone in die Survivor-Zone
    • Wenn der Überlebensbereich voll ist, verschieben Sie überlebende Objekte in die Alte Generation
  • Befehl
    • Minor GC tritt auf, wenn der Eden-Bereich voll ist
    • Verschieben Sie überlebende Objekte aus dem Eden-Bereich und dem Survivor-Bereich in den leeren Survivor-Bereich
      • „Eden + S0 -> S1“ oder „Eden + S1 -> S0“.
    • Der Alterswert erhöht sich bei Umzug

Major G.C.

  • charakteristisch
    • GC kommt in der alten Generation vor
    • Major GC tritt auf, wenn der Bereich der alten Generation voll ist.
    • Entfernt nicht erreichbare Objekte aus dem Bereich der alten Generation

Vollständige GC

  • charakteristisch
    • Führen Sie GC in den Bereichen Young Generation, Old Generation und Perm durch
    • Wenn eine vollständige GC auftritt, werden alle Threads gestoppt.
    • Wenn eine vollständige GC auftritt, treten alle Haupt-GC, Neben-GC und Perm-Bereichs-GC auf.

Quelle