Найти в Дзене
JavaForLife

Java 11 LTS vs Java 17 LTS (Часть 1)

Оглавление

Версии Java уже давно выпускаются с периодичностью раз в полгода, однако версии которые имеют длительную поддержку выходят как и раньше: один раз в два-три года, такие версии Java 8, 11 и 17.

Применение остальных версий в продакшн оправдано частым выходом релизов при разработке, ну или любопытством, которое может привести к серьезным вопросам при следующих релизах

В данном цикле статей будет приведены ключевые отличия в версиях Java, которые могут быть использованы как краткий справочник, при подготовке к собеседованию на позицию Java Developer.

Те кто знаком с версиями Java 12,...16 могут сказать, что часть описанных ниже новинок Java 17 уже есть в более ранних версиях и будут правы, но я сравниваю LTS версии, то есть с длительной поддержкой и стоит отметить, что перед тем как в релиз войдет изменение, оно обязательно проходит обкатку в двух версиях Java.

Так же, стоит отметить, что все изменения описываться не будут, так как их достаточно много и тут самым оптимальным вариантом было бы порекомендовать обратиться к документации.

Итак начнем:

1) Производительность:

  • Java 17 на 8,66% быстрее, чем Java 11 для G1GC.
  • Java 17 на 6,54% быстрее, чем Java 11 для ParallelGC.
  • Parallel Garbage Collector на 16,39% быстрее, чем G1 Garbage Collector

Данные замеры можно подробно просмотреть тут в оригинале

Вообще стоит заметить, что в Java 17 много оптимизаций было посвящено как раз работе GarbageCollectors, так полностью убран CMS, при этом получил большую оптимизацию в работе G1.

2) Текстовые блоки:

Да, наконец, появилась возможность использования текстовых блоков - данная новинка может быть интересна тем, кто любит в коде использовать многострочный текст, ну например, содержится целая xml или html страница

Синтаксис очень прост, при использовании текстовых блоком мы должны ставить тройные кавычки - """ и наш блок должен начинаться с новой строки:

Пример:

-2

3) Records

- тип предназначенный для хранения данных, можно сказать, что это программная реализация @Value от Lombok, не будет ошибкой, если мы условно сопоставим Record с enum.

Нет, это вовсе не синтаксический сахар, это достаточно, как я полагаю, будет востребованный тип работы с данными, так как он позволяет быстро создавать POJO без определения геттеров, сеттеров, hashcode и equals

Вот достаточно наглядный пример:

При создании класса People, содержащий поля: имя, город, возраcт, мы должны создать поля, определить геттеры, сеттеры, equals, hashcode, toString

-3

при использовании Record запись сводится в одну строку:

public record People (String name, String town, int age) {}

Конечно, к данной форме еще придется привыкнуть, но согласитесь - удобно и экономит огромное количество строчек кода

В следующей части мы коснемся не менее интересных изменений, пришедших в Java 17 LTS и подписывайтесь на наш канал