Die Garbage Collection ist ein wichtiger Wissenspunkt in JAVA, und sie ist auch ein bekannter Wissenspunkt. Schließlich bringt JAVA immer die Garbage Collection mit, wenn sie vorgibt, fortgeschritten zu sein. Aus diesem Grund ist es zu einem häufigen Besucher in Vorstellungsgesprächen geworden. Der Interviewer bittet Sie häufig, zu erklären, was Garbage Collection ist und welche Prinzipien es hat. Natürlich, und auf jeden Fall, der Interviewer, der Sie zum Thema Garbage Collection befragt hat, weiß zu 99 % nur wenig darüber. Wenn der Interviewer Sie fragt, was der Garbage-Collection-Mechanismus ist, sollten Sie ernsthaft fragen: Welche VM fragen Sie nach dem Garbage-Collection-Mechanismus?
Da die Konzepte und Algorithmen der Garbage Collection komplex sind, werden Sie definitiv mehr verlieren als gewinnen, wenn Sie alle Details verstehen wollen. Wenn wir jedoch den folgenden Überblick über den Garbage-Collection-Mechanismus beherrschen, werden Sie meiner Meinung nach in den meisten Interviews keine Punkte verlieren.
1: Was ist Müll?
Wenn Sie beispielsweise ein Objekt nicht mehr verwenden, ist es Müll, wie zum Beispiel:
public void test01(){
User user = new User();
//...
}
Nachdem die test01-Methode ausgeführt wurde, hat das Benutzerobjekt keine Verwendung, dann ist es Müll.
2: Warum ist die Müllabfuhr notwendig?
Wir wissen, dass Objekte auf dem Heap gespeichert werden. Wie groß ist der Heap? Obwohl es über Befehlsparameter angepasst werden kann, ist die Java-Heap-Größe normalerweise unter 32-Bit-Systemen auf 2 GB festgelegt, 500 MB werden der neuen Generation (YoungGen) und 1,5 GB der alten Generation (OldGen) zugewiesen. Raum. Auch wenn es sich um eine 64-Bit-Version handelt, denken Sie darüber nach, wie viel Hardwarespeicher unser PC haben kann.
Daher wird der gesamte nutzlose Müll recycelt, um Platz für andere Gegenstände zu schaffen.
3: JDKs Standard-HotSpot-VM-Garbage-Collection-Mechanismus
1: Klassifizierung des Heap-Speichers
Um diesen Mechanismus zu verstehen, müssen Sie zunächst die Klassifizierung von Heaps verstehen. Ja, wir wissen nur, dass Objekte auf dem Heap vorhanden sind, aber wir wissen nicht, dass das Innere des Heaps auch in mehrere Räume unterteilt ist, wie in der folgenden Abbildung dargestellt:
Junge/neue Generation Die neue Generation
ist intern in Eden und zwei Survivor Spaces unterteilt. Alle neu erstellten Objekte werden der neuen Generation zugeordnet
Alte/Tenured Generation Alte/Tenured Generation
Die alte Generation wird zur Speicherung noch lebender Objekte verwendet nach mehreren Garbage Collections im Programm. Objekt
(PS: Nicht-Heap-Speicher der permanenten Generation, der zum Speichern statischer Dateien wie Java-Klassen, Methoden usw. verwendet wird. Die persistente Generation hat keine wesentliche Auswirkung auf die Müllabfuhr. )
2: Recyclingreihenfolge
Die Ausführungsreihenfolge für jeden Bereich ist wie folgt:
Die meisten von ihnen haben gerade erst die erstellten Objekte im Eden-Raum gespeichert.
Nachdem die erste GC im Eden-Raum durchgeführt wurde, werden die überlebenden Objekte in einen der Überlebensräume verschoben.
Danach, nach der Ausführung von GC im Eden-Raum, werden überlebende Objekte im selben Überlebensraum gestapelt.
Wenn ein Überlebensraum gesättigt ist, werden überlebende Objekte in einen anderen Überlebensraum verschoben. Der gesättigte Überlebensraum wird dann gelöscht.
Nach mehrmaligem Wiederholen der obigen Schritte werden noch lebende Objekte in die alte Generation verschoben.
4: Garbage Collector und Recycling-Algorithmus
Beide Generationstypen haben jeweils ihren eigenen Collector verwendet einen anderen Algorithmus. Denken Sie daran, dass Anfänger nicht jedes algorithmische Prinzip beherrschen müssen.
Vom Collector der neuen Generation verwendete Collectors: Serial, PraNew, Parallel Scavenge
Vom Collector der alten Generation verwendete Collectors: Serial Old, Parallel Old, CMS
Andere Die entsprechenden Der Algorithmus lautet wie folgt:
Serieller Kollektor (Kopieralgorithmus)
Einzelthread-Kollektor der neuen Generation, Markierung und Reinigung sind beide Single-Threaded, der Vorteil ist Einfachheit und Effizienz.
Serial Old Collector (Markierungs- und Sortieralgorithmus)
Single-Threaded-Collector der alten Generation, Version des Serial Collectors der alten Generation.
ParNew-Kollektor (Stop-Copy-Algorithmus)
Der Kollektor der neuen Generation kann als Multithread-Version des Serial-Kollektors betrachtet werden, der in Multi eine bessere Leistung bietet -Core-CPU-Umgebungen bieten eine bessere Leistung.
Parallel Scavenge Collector (Stop-Copy-Algorithmus)
Parallel Collector, der einen hohen Durchsatz und eine effiziente CPU-Nutzung anstrebt. Der Durchsatz beträgt im Allgemeinen 99 %, Durchsatz = Benutzer-Thread-Zeit / (Benutzer-Thread-Zeit + GC-Thread-Zeit). Es eignet sich für Szenarien wie Hintergrundanwendungen, die keine hohe Interaktionsreaktion erfordern.
Parallel Old Collector (Stop-Copy-Algorithmus)
Die alte Generation von Parallel Scavenge Collector, Parallel Collector, Durchsatzpriorität
CMS-Kollektor (Concurrent Mark Sweep) (Mark-Sweep-Algorithmus)
Hohe Parallelität, geringe Pausen, Streben nach kürzester GC-Recycling-Pausenzeit, relativ hohe CPU-Auslastung, schnelle Reaktionszeit, kurze Pausenzeit, Multi-Core-CPU ist die Wahl, um eine hohe Reaktionszeit anzustreben
5: Wann wird die Müllabfuhr durchgeführt?
Es gibt zwei Arten der Garbage Collection: Scavenge GC und Full GC.
Wenn ein neues Objekt generiert wird und sich nicht um Platz in Eden bewirbt, wird Scavenge GC ausgelöst. Zu diesem Zeitpunkt wird die Speicherbereinigung für die neue Generation durchgeführt.
Wenn die alte Generation (Tenured) gefüllt ist, ist die persistente Generation (Perm) gefüllt, System.gc() wird explizit aufgerufen und die Zuordnungsstrategie des Heaps für jede Domäne ändert sich dynamisch, nachdem der letzte GC ausgeführt wurde Vollständiger GC.
Beachten Sie, dass, egal um welche Art von Recycling es sich handelt, dies nicht bedeutet, dass der gesamte Müll recycelt wird, sondern dass eine bestimmte Menge Müll innerhalb eines Zeitraums entfernt wird, der auf der eigenen Beurteilung des Algorithmus basiert. Dieses Mal und diese Menge wissen wir nicht.
Das Obige ist der Speicherbereinigungsmechanismus, den Sie kennen müssen.
Das obige ist der detaillierte Inhalt vonJAVA-Garbage-Collection-Mechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Wie lindert Java plattformspezifische Probleme? Java implementiert plattformunabhängig über JVM- und Standardbibliotheken. 1) Bytecode und JVM verwenden, um die Unterschiede für das Betriebssystem abstrahieren; 2) Die Standardbibliothek bietet plattformübergreifende APIs wie Pfade der Klassenverarbeitungsdateien und die Codierung von Charset Class Processing. 3) Verwenden Sie Konfigurationsdateien und Multi-Plattform-Tests in tatsächlichen Projekten zur Optimierung und Debuggierung.

Java'SplatformIndependenceEnhancesMicroservicesArchitecture byFeringDeploymentFlexibilität, Konsistenz, Skalierbarkeit und Portabilität.1) EinsatzFlexibilitätsmarkroservicestorunonanyplatformwithajvm.2) konsistenzacrossservicessimplimplimplifiesDevention und

Graalvm verbessert die Unabhängigkeit der Java-Plattform auf drei Arten: 1. Cross-Sprach-Interoperabilität und ermöglicht es Java, nahtlos mit anderen Sprachen zusammenzuarbeiten; 2. Unabhängige Laufzeitumgebung, kompilieren Sie Java -Programme in lokale ausführbare Dateien über GraalvmnativeImage; 3. Die Leistungsoptimierung generiert Graal Compiler einen effizienten Maschinencode, um die Leistung und Konsistenz von Java -Programmen zu verbessern.

ToeffectiveTeTestJavaApplicationsforplatformCompatibilität, folgt der THESESTEPS: 1) SetupautomatedTestingAcrossMultiPlatformseususecitools-ähnlichemkinsorgithubactions.2) DirimesManualTestingonRealhardwaretocatchissusisNotFoundincincien-Birgen.3) checkcross-pla

Der Java-Compiler erkennt die Unabhängigkeit der Java-Plattform, indem es den Quellcode in plattformunabhängige Bytecode konvertiert und Java-Programmen mit installiertem Betriebssystem mit JVM ausgeführt wird.

BytecodeachieVesplattformindependencyBeineingexecutedByavirtualMachine (VM), ZulassencodetorunonanyPlatformWiththeApprotecuse -Forexample, JavabytecodecanrunonanyDeviceWithajvm, Enabling "Writeonce, Runanywhere," Funktionalität "Funktionalität" Funktionalität "Funktionalität" Funktionalität "Funktionalität" Funktionalität "Funktionalität" Funktionalität "Funktionalität" functionaly.- "Funktionalität" Funktionalität "

Java kann keine 100% ige Plattformunabhängigkeit erreichen, aber die Unabhängigkeit der Plattform wird über JVM und Bytecode implementiert, um sicherzustellen, dass der Code auf verschiedenen Plattformen ausgeführt wird. Spezifische Implementierungen umfassen: 1. Zusammenstellung in Bytecode; 2. Interpretation und Ausführung von JVM; 3. Konsistenz der Standardbibliothek. JVM-Implementierungsunterschiede, Betriebssystem- und Hardwareunterschiede sowie die Kompatibilität von Bibliotheken von Drittanbietern können sich jedoch auf die Unabhängigkeit der Plattform auswirken.

Java realisiert die Unabhängigkeit der Plattform durch "einmal schreiben, überall rennen" und verbessert die Code -Wartbarkeit: 1. REUSE der Code und reduziert die doppelte Entwicklung; 2. Niedrige Wartungskosten, es ist nur eine Änderung erforderlich; 3. Die Effizienz der High -Team -Kollaboration ist hoch und bequem für den Wissensaustausch.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Dreamweaver CS6
Visuelle Webentwicklungstools

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool
