Версии 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 страница
Синтаксис очень прост, при использовании текстовых блоком мы должны ставить тройные кавычки - """ и наш блок должен начинаться с новой строки:
Пример:
3) Records
- тип предназначенный для хранения данных, можно сказать, что это программная реализация @Value от Lombok, не будет ошибкой, если мы условно сопоставим Record с enum.
Нет, это вовсе не синтаксический сахар, это достаточно, как я полагаю, будет востребованный тип работы с данными, так как он позволяет быстро создавать POJO без определения геттеров, сеттеров, hashcode и equals
Вот достаточно наглядный пример:
При создании класса People, содержащий поля: имя, город, возраcт, мы должны создать поля, определить геттеры, сеттеры, equals, hashcode, toString
при использовании Record запись сводится в одну строку:
public record People (String name, String town, int age) {}
Конечно, к данной форме еще придется привыкнуть, но согласитесь - удобно и экономит огромное количество строчек кода
В следующей части мы коснемся не менее интересных изменений, пришедших в Java 17 LTS и подписывайтесь на наш канал