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

Статья из группы Random

Знакомимся с 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). Для этого требуется, чтобы элементы имели некоторый механизм сравнения, либо со сравнением, либо с компаратором. Порядок итераций определяется этим механизмом.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ