JavaRush /Blog Java /Random-PL /Przerwa kawowa #132. Rzućmy okiem na ZGC, najnowszy moduł...

Przerwa kawowa #132. Rzućmy okiem na ZGC, najnowszy moduł zbierający śmieci w JDK. Jaka jest różnica między HashMap, LinkedHashMap i TreeMap w Javie

Opublikowano w grupie Random-PL

Przedstawiamy ZGC, najnowszy moduł zbierający śmieci JDK

Źródło: Inside Java ZGC lub Z Garbage Collector to najnowocześniejszy moduł zbierający śmieci w JDK. Pierwotnie pojawił się w JDK 11 jako funkcja eksperymentalna. ZGC stał się funkcją produkcyjną w JDK 15 po zatwierdzeniu ulepszenia JEP 377. W tym artykule przyjrzymy się celom i przyszłości ZGC. Przerwa kawowa #132.  Rzućmy okiem na ZGC, najnowszy moduł zbierający śmieci w JDK.  Jaka jest różnica między HashMap, LinkedHashMap i TreeMap w Javie - 1

Recenzja ZGC

ZGC został zaprojektowany jako skalowalny moduł zbierający elementy bezużyteczne o niskim opóźnieniu. Maksymalny czas przerwy podczas pracy ZGC rzadko przekracza 250 mikrosekund.Tak, dokładnie mikrosekund, przy średnim czasie przerwy wynoszącym kilkadziesiąt mikrosekund. ZGC jest wysoce skalowalny, z minimalnym rozmiarem sterty w zakresie od 8 MB do 16 TB. Należy zauważyć, że czas pauzy nie zwiększa się wraz z rozmiarem sterty. Zatem nawet przy stercie o wielkości kilku terabajtów czas pauzy będzie nadal mierzony w mikrosekundach. Chociaż ZGC zapewnia małe opóźnienia i wysoką skalowalność, wiąże się to z kosztem przepustowości, która jest o około 10% niższa w porównaniu do G1. Dokładna redukcja przepustowości zależy od projektu aplikacji, architektury systemu i potrzeb biznesowych.

Korzystanie z ZGC

Ponieważ G1 jest domyślnym modułem zbierającym elementy bezużyteczne, począwszy od JDK 9, będziesz musiał ustawić flagę VM -XX:+UseZGC, aby używać ZGC. Podczas korzystania z ZGC najważniejszą konfiguracją jest ustawienie maksymalnego rozmiaru sterty, -Xmx. Rozmiar sterty powinien być wystarczająco duży, aby obsłużyć zestaw na żywo aplikacji. Musi mieć także dodatkową rezerwę, aby móc realizować zbieranie śmieci. Im więcej miejsca jest dostępne na stercie, tym rzadziej będzie wymagane wyrzucanie elementów bezużytecznych. Należy jednak pamiętać, że należy to zrównoważyć zużyciem pamięci.

Dalszy rozwój ZGC

Od czasu wydania jako funkcji produkcyjnej w JDK 15, ZGC jest nadal aktywnie rozwijany. Wraz z wydaniem JDK 16 wprowadzono przetwarzanie równoległe stosu wątków (JEP 376), a JDK 18 dodało deduplikację wierszy jako dodatkową funkcję. W przyszłości planuje się, że ZGC stanie się wielopokoleniowe, chociaż nie ustalono jeszcze konkretnych ram czasowych wdrożenia tego usprawnienia.

Więcej informacji o ZDC

Jaka jest różnica między HashMap, LinkedHashMap i TreeMap w Javie

Źródło: Rrtutors Jeśli chcesz przechowywać pary klucz-wartość w programie Java, kolekcje Java oferują wiele opcji w tym zakresie, w zależności od potrzeb. Należą do nich LinkedHashmap , HashMap i TreeMap . Kluczowe różnice między tymi trzema klasami polegają na ich wewnętrznej implementacji i konkretnym zastosowaniu w niektórych przypadkach. Przerwa kawowa #132.  Rzućmy okiem na ZGC, najnowszy moduł zbierający śmieci w JDK.  Jaka jest różnica między HashMap, LinkedHashMap i TreeMap w Javie - 2

Różnice pomiędzy HashMap, LinkedHashMap i TreeMap w Javie

Oto główne różnice między trzema wymienionymi klasami w oparciu o implementację, porządkowanie, sortowanie i obsługę kluczy i wartości zerowych.

Realizacja

Zarówno HashMap , jak i LinkedHashMap implementują interfejs Map , podczas gdy TreeMap implementuje interfejsy Map , NavigableMap i vSortedMap. LinkedHashMap jest zaimplementowany jako podwójnie połączony segment list, HashMap jest zaimplementowany jako tablica mieszająca, a TreeMap jest zaimplementowany jako drzewo.

Zamawianie i sortowanie

  • HashMap nie gwarantuje żadnej kolejności iteracji. Może się jednak całkowicie zmienić po dodaniu nowych elementów.

  • LinkedHashMap będzie iterował w kolejności, w jakiej wpisy zostały umieszczone na mapie.

  • TreeMap iteruje zgodnie z „naturalną kolejnością” kluczy zgodnie z ich metodą CompareTo() (lub zewnętrznym komparatorem). Implementuje także interfejs SortedMap , który zawiera metody zależne od kolejności sortowania.

Klucze i wartości zerowe

HashMaps i LinkedHashMap obsługują wartości null, a także wartości kluczowe, natomiast TreeMaps nie obsługują wartości null, ponieważ obsługują naturalne typy elementów. Dla przykładu wizualnego utwórzmy HashMap , LinkedHashMap i 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);

            }

}
Na wyjściu otrzymujemy:
{First=Java, Second=Python} Wartości HashMap to: {Second=Python, First=Java} Wartości LinkedHashMap to: {First=Java, Second=Python}
Zatem wszystkie trzy klasy reprezentują mapowanie unikalnych kluczy na wartości i dlatego implementują interfejs Map .
  • HashMap to mapa oparta na mieszaniu kluczy. Obsługuje operacje get/put O(1). Klucze muszą mieć spójne implementacje hashCode() i równości() .

  • LinkedHashMap jest bardzo podobna do HashMap , ale ma kolejność dodawania elementów (lub uzyskiwania do nich dostępu), zatem kolejność iteracji jest taka sama jak kolejność umieszczania (lub kolejność dostępu, w zależności od parametrów projektu).

  • TreeMap to mapowanie oparte na drzewach. Operacje put/get zajmują czas O(log n). Wymaga to, aby elementy miały jakiś mechanizm porównawczy, albo z porównaniem, albo z komparatorem. Kolejność iteracji jest określona przez ten mechanizm.

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