JavaRush /Java-Blog /Random-DE /Google lernen | Stufe 4 | Vorlesung 11
sunshine4545
Level 41
Минск

Google lernen | Stufe 4 | Vorlesung 11

Veröffentlicht in der Gruppe Random-DE
Google lernen |  Stufe 4 |  Vorlesung 11 - 1

1. Funktionsweise des Garbage Collectors in Java

Der Garbage Collector ist ein Prozess mit niedriger Priorität, der regelmäßig ausgeführt wird und Speicher freigibt, der von Objekten verwendet wird, die nicht mehr benötigt werden. Der Garbage Collector läuft im Hintergrund parallel zum Programm in einem separaten Thread. Die Grundlage für die Garbage Collection ist nicht die Referenzzählung, sondern die Aufteilung von Objekten in zwei Typen – erreichbare und nicht erreichbare. Ein Objekt gilt als erreichbar (lebendig), wenn es von einem anderen erreichbaren (lebenden) Objekt referenziert wird. Die Erreichbarkeit wird anhand von Threads gezählt. Laufende Threads gelten immer als erreichbar (lebendig), auch wenn niemand auf sie verweist. Alle Objekte in Java werden in einem speziellen Speicherbereich namens Heap gespeichert. Alle Objekte in Programmen können in zwei Typen unterteilt werden – relativ gesehen einfache Objekte und „langlebige“ Objekte. „Langlebige“ Objekte sind solche, die viele Garbage Collections überstanden haben. Meistens bleiben sie bis zum Ende des Programms bestehen. Dadurch wurde der gemeinsame Heap, in dem alle erstellten Objekte gespeichert werden, in mehrere Teile aufgeteilt. Der erste Teil hat einen schönen Namen – Eden (biblischer „Garten Eden“), hierher kommen Objekte, nachdem sie erschaffen wurden. In diesem Teil wird Speicher für neue Objekte zugewiesen, wenn wir neue schreiben. Es können viele Objekte erstellt werden, und wenn in diesem Bereich kein Platz mehr vorhanden ist, beginnt die erste, „schnelle“ Speicherbereinigung. Es muss gesagt werden, dass der Garbage Collector sehr intelligent ist und einen Arbeitsalgorithmus wählt, je nachdem, was sich mehr im Heap befindet – Müll oder Arbeitsobjekte. Wenn fast alle Objekte Müll sind, markiert der Collector die „lebenden“ Objekte und verschiebt sie in einen anderen Speicherbereich, woraufhin der aktuelle Bereich vollständig bereinigt wird. Wenn wenig Müll vorhanden ist und der Großteil davon mit lebenden Objekten belegt ist, markiert es den Müll, reinigt ihn und ordnet die verbleibenden Objekte. Der Speicherbereich, in den alle Objekte übertragen werden, die mindestens eine Garbage Collection überleben, wird Survival Space genannt. Survival Space wiederum ist in Generationen eingeteilt. Jedem Objekt wird eine Generation zugewiesen, die auf der Anzahl der Garbage Collections basiert, die es durchlaufen hat. Wenn es eine gibt, gehört sie zur „Generation 1“, wenn 5 – zur „Generation 5“. Gemeinsam bilden Eden und Survival Space einen Bereich namens Young Generation. Neben Young Generation gibt es im Heap einen weiteren Speicherbereich – Old Generation („alte Generation“). Dies sind die sehr langlebigen Objekte, die viele Müllsammlungen überstanden haben. Es ist rentabler, sie getrennt von allen anderen aufzubewahren. Und zwar erst, wenn der Old-Generation-Bereich voll ist, also Auch wenn das Programm so viele langlebige Objekte enthält, dass nicht genügend Speicher vorhanden ist, wird eine vollständige Garbage Collection durchgeführt. Es verarbeitet nicht nur einen Speicherbereich, sondern grundsätzlich alle von der Java-Maschine erstellten Objekte. Natürlich kostet es viel mehr Zeit und Ressourcen. Aus diesem Grund wurde beschlossen, langlebige Gegenstände getrennt aufzubewahren. Wenn in anderen Bereichen der Platz knapp wird, wird eine sogenannte „Rapid Garbage Collection“ durchgeführt. Es deckt nur einen Bereich ab und ist dadurch wirtschaftlicher und schneller. Am Ende, Wenn selbst der Bereich für langlebige Bewohner bereits verstopft ist, kommt die Vollreinigung ins Spiel. Somit wird das „schwerste“ Werkzeug vom Monteur nur dann verwendet, wenn es nicht mehr benötigt wird. Google lernen |  Stufe 4 |  Vorlesung 11 - 2

2. Welche Arten von Müllsammlern gibt es?

Java verfügt über sieben Arten von Garbage Collectors:
  1. Serieller Garbage Collector
  2. Paralleler Garbage Collector
  3. CMS Garbage Collector
  4. G1 Garbage Collector
  5. Epsilon Garbage Collector
  6. Z-Müllsammler
  7. Shenandoah-Müllsammler

3. Was sind „Generationen“ von Objekten?

Alle Objekte im Survival Space sind in Generationen unterteilt. Jedem Objekt wird eine Generation zugewiesen, die auf der Anzahl der Garbage Collections basiert, die es durchlaufen hat. Wenn es eine gibt, gehört sie zur „Generation 1“, wenn 5 – zur „Generation 5“.

4. Wofür wird SoftReference verwendet?

Ein Objekt, auf das nur durch Soft-Referenzen verwiesen wird, kann durch Garbage Collection erfasst werden, wenn das Programm nicht mehr über genügend Arbeitsspeicher verfügt. Wenn einem Programm plötzlich der Speicher ausgeht, löscht der Garbage Collector vor dem Auslösen einer OutOfMemoryException alle Objekte, auf die durch Softlinks verwiesen wird, und versucht erneut, dem Programm Speicher zuzuweisen. Ein Objekt, das nur durch SoftReference vor dem Absterben bewahrt wird, kann eine beliebige Anzahl von Garbage Collections überstehen und wird höchstwahrscheinlich zerstört, wenn dem Programm der Speicher ausgeht.

5. Beispiel für die Verwendung von SoftReference

SoftReferences wurden speziell für das Caching entwickelt. Nehmen wir an, dass ein Clientprogramm häufig verschiedene Daten von einem Serverprogramm anfordert. Dann kann das Serverprogramm einige davon zwischenspeichern und dazu SoftReference verwenden. Wenn Objekte, die durch Soft-Referenzen vor dem Tod bewahrt werden, den größten Teil des Speichers beanspruchen, löscht der Garbage Collector sie einfach und das war's.

6. Beispiel für die Verwendung von WeakReference

Wenn es nur schwache Verweise auf ein Objekt gibt, dann ist dieses Objekt lebendig, wird aber bei der nächsten Garbage Collection zerstört. Ein Objekt, das allein durch WeakReference vor dem Absterben bewahrt wird, überlebt die nächste Garbage Collection nicht. Aber bis es passiert, können Sie es erhalten, indem Sie eine Methode get()auf WeakReference aufrufen und deren Methoden aufrufen oder etwas anderes tun. Ein Beispiel für die Verwendung von WeakReference ist WeakHashMap.

7. Warum WeakHashMap benötigt wird

WeakHashMap ist eine HashMap, deren Schlüssel schwache Referenzen sind – WeakReference. Sie speichern Objektpaare in einer WeakHashMap – einen Schlüssel und einen Wert. Aber WeakHashMap verweist nicht direkt auf die Schlüssel, sondern über WeakReference. Wenn als Schlüssel verwendete Objekte nicht mehr erreichbar sind, werden sie daher bei der nächsten Speicherbereinigung zerstört. Das bedeutet, dass ihre Werte automatisch aus der WeakHashMap entfernt werden. WeakHashMap eignet sich sehr gut zum Speichern zusätzlicher Informationen für einige Objekte. Erstens ist es sehr einfach, ihn zu erhalten, wenn man das Objekt selbst als Schlüssel verwendet. Zweitens: Wenn ein Objekt zerstört wird, verschwinden sowohl es als auch alle damit verbundenen Daten aus der HashMap. Das Programm verfügt beispielsweise über einen Thread, der die Arbeit einiger Aufgabenobjekte überwacht und Informationen darüber in das Protokoll schreibt. Dann kann dieser Thread die verfolgten Objekte in einer solchen WeakHashMap speichern. Sobald Objekte nicht mehr benötigt werden, werden sie vom Garbage Collector gelöscht und Verweise darauf aus der WeakHashMap werden automatisch gelöscht.

8. Was ist ein Logger?

Ein Logger-Objekt wird zum Protokollieren von Nachrichten für ein bestimmtes System oder eine bestimmte Anwendungskomponente verwendet. Ein Protokoll ist eine Liste der aufgetretenen Ereignisse. Am häufigsten werden Informationen über die Methodenparameter, mit denen sie aufgerufen wurde, alle abgefangenen Fehler und viele Zwischeninformationen in das Protokoll geschrieben. Der gesamte Protokollierungsprozess besteht aus drei Teilen.
  • Der erste Teil besteht darin, Informationen zu sammeln.
  • Der zweite Teil besteht darin, die gesammelten Informationen zu filtern.
  • Der dritte Teil ist eine Aufzeichnung der ausgewählten Informationen.

9. So richten Sie einen Logger ein

  1. Abhängigkeit zu pom.xml hinzufügen.
  2. Fügen Sie die Datei log4j.properties zu den Ressourcen hinzu.
    Normalerweise werden die Log4j-Logger-Einstellungen in der Datei log4j.properties festgelegt. In dieser Datei können Sie mehrere Appender angeben – Objekte, in die Daten geschrieben werden.
  3. Zur Klasse mit Geschäftslogik hinzufügen private static final Logger log = Logger.getLogger(ххх.class);.
Gebraucht:
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION