Java 12 и всё, что должен знать Java-программист
Настало время Java 12! Важнейшие изменения, с которыми вы будете готовы к работе с новой версией на все сто, в одной статье.
Java ускорила сроки выпуска обновлений до шести месяцев. А вот важные обновления Java 12.
Shenandoah: A Low-Pause-Time Garbage Collector
В этой экспериментальной функции рассматривается Shenandoah – новый алгоритм сборки мусора (GC). Алгоритм предназначен для приложений, которые предпочитают отзывчивость и предсказуемость.
Эта фича сокращает прерывание программ, выполняющихся в доступной памяти, до нескольких миллисекунд.
Алгоритм сокращает время паузы при сборки мусора, выполняя очистку одновременно с работающими потоками Java. Shenandoah оперирует параллельными циклами процессора и пространством для улучшения быстродействия. В этом случае время паузы одинаково и не зависит от размера кучи.
☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»
switch
Это улучшение расширяет оператор switch. Многопоточный оператор отправляет выражения на выполнение другим частям кода.
А вот вам наглядный пример. Излишне многословный код с оператором break часто маскирует трудные для отладки ошибки:
switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURDAY: System.out.println(8); break; case WEDNESDAY: System.out.println(9); break; }
Новая метка case L -> означает, что код справа выполнится только при соответствии метке. Так что предыдущий код можно переписать так:
switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); }
Улучшения G1
Java 12 содержит два обновления G1 – сборщика мусора по умолчанию. Первое помогает G1 прерывать смешанные коллекции, когда время паузы превышено.
G1 использует механизм анализа для выбора объема работы, необходимого для сбора мусора. Он собирает живые объекты без остановки после определения набора и запуска очистки. Это приводит к тому, что сборщик мусора превышает целевое значение времени паузы. Такую проблему и решает улучшение.
Второе улучшение G1 направлено на возврат неиспользуемой выделенной памяти.
G1 возвращает память из кучи в полном GC или во время параллельного цикла. G1 старается предотвратить полный GC и запускает параллельный цикл, исходя из распределения кучи. Придется принуждать G1 к возвращению памяти из кучи.
Второе улучшение фокусируется на быстродействии за счет автоматического возврата памяти из кучи в ОС, когда G1 не используется.
🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»
Что-то ещё?
Да, это не всё ;) Другие функции, представленные в Java 12:
- Microbenchmark Suite – добавляет базовый набор тестов производительности в исходный код JDK. Это облегчает разработчикам запуск и создание тестов производительности.
- JVM Constants API – представляет API для моделирования номинальных описаний ключевых класс-файлов и run-time артефактов (константы из пула констант). Этот API будет полезен для инструментов, управляющих классами и методами Java.
- Default CDS Archives – ускоряет время сборки JDK путем создания class data-sharing архива (CDS).
А нужно ли?
Нужно! :)
Java не стоит на месте, и это здорово! С каждым обновлением язык обзаводится улучшениями. Однако новый функционал непросто внедрить в большие системы и в корпоративный сегмент. Не говоря уже о совместимости с legacy-кодом и локальными костылями.
Java 8 – старый игрок, который остается лидером. Предполагаем, что такая картина сохранится и в ближайшем будущем.
Может показаться, что такой быстрый темп обновления языка избыточен. Дело в том, что шестимесячные обновления предназначены для реализации «мелких» функций в кратчайшие сроки. Так Java старается конкурировать с другими языками.
Java берет курс на сохранение и расширение аудитории, предоставляя собственную мощь и популярность начинающим разработчикам и ветеранам индустрии. Остается с нетерпением ждать Java 13!
Другие материалы по теме:
- 6 алгоритмов поиска на Java: от простого к сложному
- Создаём приложение с чистой архитектурой на Java 11
- Дорожная карта web-разработчика Java в 2019 году