JavaRush /Java блог /Random UA /Кава-брейк #132. Знайомимося з ZGC, найновішим збирачем с...

Кава-брейк #132. Знайомимося з ZGC, найновішим збирачем сміття JDK. У чому різниця між HashMap, LinkedHashMap та TreeMap у Java

Стаття з групи Random UA

Знайомимося з ZGC, найновішим збирачем сміття JDK

Джерело: Inside Java ZGC або Z Garbage Collector - це найсучасніший збирач сміття в JDK. Спочатку він з'явився у JDK 11 у вигляді експериментальної функції. Продакшн-функцією ZGC став у JDK 15 після затвердження покращення JEP 377. У цій статті ми розглянемо цілі та перспективи ZGC. Кава-брейк #132.  Знайомимося з ZGC, найновішим збирачем сміття JDK.  У чому різниця між HashMap, LinkedHashMap та TreeMap у Java - 1

Огляд ZGC

ZGC розроблений як масштабований збирач сміття з малою затримкою. Максимальний час паузи під час роботи ZGC рідко перевищує 250 мікросекунд, Так, саме мікросекунд, із середнім часом паузи до десятків мікросекунд. ZGC має високу масштабованість: мінімальний розмір купи становить від 8 МБ до 16 ТБ. Важливо, що час паузи не збільшується з розміром купи. Таким чином, навіть із купою розміром у кілька терабайт час паузи все одно вимірюватиметься в мікросекундах. Хоча ZGC забезпечує малу затримку та високу масштабованість, це відбувається за рахунок пропускної спроможності, яка приблизно на 10% нижча порівняно з G1. Конкретне зниження пропускної спроможності залежить від дизайну програми, архітектури системи та потреб бізнесу.

Використання ZGC

Оскільки починаючи з JDK 9 збирачем сміття за умовчанням призначено G1, для використання ZGC вам знадобиться установка прапора VM -XX:+UseZGC. При використанні ZGC найважливішою конфігурацією є встановлення максимального розміру купи -Xmx. Розмір купи повинен бути досить великим, щоб справлятися з live-set вашої програми. Також він повинен мати додатковий резерв для виконання складання сміття. Чим більше доступного місця в купі, тим рідше потрібно виконувати складання сміття. Але майте на увазі, що це має бути збалансовано з використанням пам'яті.

Подальший розвиток ZGC

З моменту свого випуску як виробнича функція в JDK 15 ZGC продовжує активно розвиватися. З виходом JDK 16 в ньому з'явилася паралельна обробка стека потоків (JEP 376), а в JDK 18 як додаткова функція додана дедуплікація рядків. У перспективі планується, що ZGC стане мультипоколінським (multi-generational), хоча конкретні терміни впровадження цього покращення ще не встановлені.

Додаткова інформація про ZDC

У чому різниця між HashMap, LinkedHashMap та TreeMap у Java

Джерело: Rrtutors Якщо ви хочете зберігати пари ключ-значення (key-value) у програмі Java, то колекції Java пропонують для цього безліч варіантів залежно від ваших потреб. До них відносяться LinkedHashmap , HashMap і TreeMap . Ключові відмінності між цими трьома класами полягають у їх внутрішній реалізації та специфіці застосування у певних випадках. Кава-брейк #132.  Знайомимося з ZGC, найновішим збирачем сміття JDK.  У чому різниця між HashMap, LinkedHashMap та TreeMap у Java - 2

Відмінності між HashMap, LinkedHashMap і TreeMap в Java

Ось основні відмінності між трьома згаданими класами, засновані на реалізації, упорядкуванні, сортуванні та підтримці нульових ключів та значень.

Реалізація

І HashMap , і LinkedHashMap реалізують інтерфейс Map , тоді як TreeMap реалізує інтерфейси Map , NavigableMap та vSortedMap. LinkedHashMap реалізований як кошик зі списком з подвійним зв'язком (double-linked list bucket), HashMap реалізований як хеш-таблиця, а TreeMap реалізований за деревоподібним принципом.

Замовлення та сортування

  • HashMap не дає жодних гарантій щодо порядку ітерацій. Однак він може повністю змінюватись при додаванні нових елементів.

  • LinkedHashMap буде виконувати ітерацію в порядку, в якому записи були поміщені в карту.

  • TreeMap виконує ітерацію відповідно до "природного порядку" ключів відповідно до їх методу compareTo() (або зовнішнім Comparator). Також він реалізує інтерфейс SortedMap , який містить методи, що залежать від порядку сортування.

Нульові ключі та значення

HashMaps та LinkedHashMap підтримують нульові значення, а також ключові значення, у той час як TreeMap не підтримують нульові значення, оскільки вони підтримують природні типи елементів. Для наочного прикладу давайте створимо HashMap , LinkedHashMap та 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);

            }

}
На виході отримаємо:
{First=Java, Second=Python} HashMap Values ​​are: {Second=Python, First=Java} LinkedHashMap values ​​are: {First=Java, Second=Python}
Таким чином всі три класи є зіставленням від унікальних ключів до значень і, отже, реалізують інтерфейс Map .
  • HashMap — це карта, яка базується на хешуванні ключів. Він підтримує операції O(1) get/put. Ключі повинні мати послідовні реалізації hashCode() та equals() .

  • LinkedHashMap дуже схожий на HashMap , але він має порядок, яким елементи додаються (або доступні), тому порядок ітерації збігається з порядком розміщення (або порядком доступу, залежно від параметрів конструкції).

  • TreeMap – це відображення за принципом дерева. Його операції put/get приймають час O (log n). Для цього потрібно, щоб елементи мали деякий механізм порівняння або з порівнянням або з компаратором. Порядок ітерацій визначається цим механізмом.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ