JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 132. Werfen wir einen Blick auf ZGC, den ...

Kaffeepause Nr. 132. Werfen wir einen Blick auf ZGC, den neuesten Garbage Collector im JDK. Was ist der Unterschied zwischen HashMap, LinkedHashMap und TreeMap in Java?

Veröffentlicht in der Gruppe Random-DE

Wir stellen ZGC vor, den neuesten Garbage Collector des JDK

Quelle: Inside Java ZGC oder Z Garbage Collector ist der modernste Garbage Collector im JDK. Es erschien ursprünglich in JDK 11 als experimentelle Funktion. ZGC wurde zu einem Produktionsfeature in JDK 15, nachdem die Erweiterung JEP 377 genehmigt wurde. In diesem Artikel werden wir uns mit den Zielen und der Zukunft von ZGC befassen. Kaffeepause Nr. 132.  Werfen wir einen Blick auf ZGC, den neuesten Garbage Collector im JDK.  Was ist der Unterschied zwischen HashMap, LinkedHashMap und TreeMap in Java - 1

ZGC-Rezension

ZGC ist als skalierbarer Garbage Collector mit geringer Latenz konzipiert. Die maximale Pausenzeit während des ZGC-Betriebs überschreitet selten 250 Mikrosekunden. Ja, genau Mikrosekunden, mit einer durchschnittlichen Pausenzeit von mehreren zehn Mikrosekunden. ZGC ist hoch skalierbar, mit minimalen Heap-Größen zwischen 8 MB und 16 TB. Es ist wichtig zu beachten, dass die Pausenzeit nicht mit der Heap-Größe zunimmt. Selbst bei einem Heap von mehreren Terabyte Größe wird die Pausenzeit also immer noch in Mikrosekunden gemessen. Obwohl ZGC eine geringe Latenz und hohe Skalierbarkeit bietet, geht dies mit Kosten für den Durchsatz einher, der im Vergleich zu G1 etwa 10 % geringer ist. Die genaue Durchsatzreduzierung hängt vom Anwendungsdesign, der Systemarchitektur und den Geschäftsanforderungen ab.

Verwendung von ZGC

Da G1 ab JDK 9 der Standard-Garbage Collector ist, müssen Sie das VM-Flag -XX:+UseZGC setzen, um ZGC zu verwenden. Bei der Verwendung von ZGC besteht die wichtigste Konfiguration darin, die maximale Heap-Größe -Xmx festzulegen. Die Heap-Größe sollte groß genug sein, um den Live-Satz Ihrer Anwendung zu verarbeiten. Es muss außerdem über zusätzliche Reserven für die Garbage Collection verfügen. Je mehr Speicherplatz auf dem Heap verfügbar ist, desto seltener ist eine Speicherbereinigung erforderlich. Beachten Sie jedoch, dass dies mit der Speichernutzung in Einklang gebracht werden muss.

Weiterentwicklung von ZGC

Seit seiner Veröffentlichung als Produktionsfunktion in JDK 15 wurde ZGC weiterhin aktiv weiterentwickelt. Mit der Veröffentlichung von JDK 16 wurde die Thread-Stack-Parallelverarbeitung (JEP 376) eingeführt, und JDK 18 fügte als zusätzliche Funktion Zeilendeduplizierung hinzu. Für die Zukunft ist geplant, dass ZGC generationsübergreifend wird, obwohl der konkrete Zeitrahmen für die Umsetzung dieser Verbesserung noch nicht festgelegt wurde.

Weitere Informationen zum ZDC

Was ist der Unterschied zwischen HashMap, LinkedHashMap und TreeMap in Java?

Quelle: Rrtutors Wenn Sie Schlüssel-Wert-Paare in einem Java-Programm speichern möchten, dann bieten Java-Sammlungen je nach Bedarf viele Möglichkeiten dafür. Dazu gehören LinkedHashmap , HashMap und TreeMap . Die Hauptunterschiede zwischen diesen drei Klassen liegen in ihrer internen Implementierung und der spezifischen Anwendung in bestimmten Fällen. Kaffeepause Nr. 132.  Werfen wir einen Blick auf ZGC, den neuesten Garbage Collector im JDK.  Was ist der Unterschied zwischen HashMap, LinkedHashMap und TreeMap in Java - 2

Unterschiede zwischen HashMap, LinkedHashMap und TreeMap in Java

Hier sind die Hauptunterschiede zwischen den drei genannten Klassen basierend auf Implementierung, Reihenfolge, Sortierung und Unterstützung für Nullschlüssel und -werte.

Implementierung

Sowohl HashMap als auch LinkedHashMap implementieren die Map- Schnittstelle , während TreeMap die Schnittstellen Map , NavigableMap und vSortedMap implementiert . LinkedHashMap wird als doppelt verknüpfter Listen-Bucket implementiert, HashMap wird als Hash-Tabelle implementiert und TreeMap wird als Baum implementiert.

Ordnen und Sortieren

  • HashMap übernimmt keine Garantien hinsichtlich der Reihenfolge der Iterationen. Es kann sich jedoch komplett ändern, wenn neue Elemente hinzugefügt werden.

  • LinkedHashMap iteriert in der Reihenfolge, in der die Einträge in der Karte platziert wurden.

  • TreeMap iteriert gemäß der „natürlichen Reihenfolge“ der Schlüssel entsprechend ihrer Methode „compareTo()“ (oder dem externen Komparator). Es implementiert auch die SortedMap- Schnittstelle , die Methoden enthält, die von der Sortierreihenfolge abhängen.

Nullschlüssel und -werte

HashMaps und LinkedHashMap unterstützen Nullwerte sowie Schlüsselwerte, während TreeMaps keine Nullwerte unterstützen, da sie natürliche Elementtypen unterstützen. Als visuelles Beispiel erstellen wir eine HashMap , eine LinkedHashMap und eine TreeMap .
import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.TreeMap;

public class HashMap_LinkedHashMap_TreeMap {

            public static void main(String[] args) {

                  Map Treemapu = new TreeMap();

                  Treemapu.put("First", "Java");

                  Treemapu.put("Second", "Python");

                  System.out.println("TreeMap values are: \n" + Treemapu);

                  Map Hashimapu = new HashMap();

                  Hashimapu.put("First", "Java");

                  Hashimapu.put("Second", "Python");

                  System.out.println("HashMap Values are: \n" + Hashimapu);

                  Map LinkedHashiMapu = new LinkedHashMap();

                  LinkedHashiMapu.put("First", "Java");

                  LinkedHashiMapu.put("Second", "Python");

                  System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);

            }

}
Als Ausgabe erhalten wir:
{First=Java, Second=Python} HashMap-Werte sind: {Second=Python, First=Java} LinkedHashMap-Werte sind: {First=Java, Second=Python}
Somit stellen alle drei Klassen eine Zuordnung von eindeutigen Schlüsseln zu Werten dar und implementieren daher die Map- Schnittstelle .
  • HashMap ist eine Karte, die auf Schlüssel-Hashing basiert. Es unterstützt O(1) Get/Put-Operationen. Schlüssel müssen konsistente hashCode()- und equal()- Implementierungen haben .

  • Eine LinkedHashMap ist einer HashMap sehr ähnlich , verfügt jedoch über eine Reihenfolge, in der Elemente hinzugefügt (oder darauf zugegriffen) werden, sodass die Iterationsreihenfolge mit der Platzierungsreihenfolge (oder Zugriffsreihenfolge, abhängig von den Entwurfsparametern) identisch ist.

  • TreeMap ist eine baumbasierte Zuordnung. Seine Put/Get-Operationen benötigen O(log n) Zeit. Dies erfordert, dass die Elemente über eine Art Vergleichsmechanismus verfügen, entweder mit einem Vergleich oder einem Komparator. Die Reihenfolge der Iterationen wird durch diesen Mechanismus bestimmt.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION