Каковы ключевые различия между JDK 8 и JDK 11?

Ответ

Переход с JDK 8 (LTS) на JDK 11 (LTS) — один из самых значимых в экосистеме Java. Вот ключевые изменения:

1. Модульная система (Project Jigsaw)

  • JDK 11: Введена модульная система Java Platform Module System (JPMS). Сам JDK разделен на модули (например, java.base). Это позволяет создавать минимальные образы приложений (jlink) и улучшает инкапсуляцию.
  • JDK 8: Монолитная структура rt.jar.

2. Удаленные модули и API

  • Удален Java EE и CORBA модули: java.xml.ws, java.xml.bind (JAXB), java.activation, java.corba и др. Перемещены в отдельные библиотеки (например, Jakarta EE).
  • Удалена утилита javafx: Вынесена из JDK в отдельный проект OpenJFX.

3. Новые возможности языка и API

  • Локальные переменные в лямбда-выражениях (Java 10): var можно использовать в лямбда-параметрах.
  • Новые методы в стандартных API:
    • String: isBlank(), lines(), repeat(n), strip() (Unicode-аware аналог trim()).
    • Files: readString(), writeString().
    • Collection: toArray(IntFunction<T[]>).
    • Optional: isEmpty().

4. Запуск и компиляция

  • Запуск исходного кода: Можно запустить файл .java без явной компиляции: java HelloWorld.java.
  • Утилита javac может компилировать для более старой версии платформы без установки этой версии JDK (опция --release).

5. Сборщик мусора

  • G1GC стал сборщиком по умолчанию (вместо Parallel GC).
  • Удален устаревший сборщик CMS (Concurrent Mark-Sweep) (объявлен deprecated в JDK 9).

6. Производительность и безопасность

  • Новые алгоритмы шифрования: Поддержка TLS 1.3, алгоритм ChaCha20-Poly1305.
  • Улучшения производительности: Новые реализации SHA-3 хэшей, улучшения в HashMap и ConcurrentHashMap.

7. Лицензирование и дистрибутивы

  • Изменение лицензии: С JDK 11 Oracle перешла на коммерческую лицензию для своих билдов для production-использования. Это стимулировало использование свободных билдов OpenJDK от других поставщиков (Adoptium/Temurin, Amazon Corretto, Azul Zulu).

Практический итог: Обновление с JDK 8 на 11 требует проверки зависимостей (удаленные API), возможной адаптации под модули и пересмотра лицензионной политики, но дает преимущества в безопасности, производительности и размере приложений.

Ответ 18+ 🔞

А, ну это же классика, блядь! Переход с восьмой джавы на одиннадцатую — это как переехать из хрущёвки в новостройку, где половину розеток забыли сделать, зато лифт не застревает. Слушай, разберём по косточкам, что там нахуй поменялось.

1. Модули, ёпта! (Project Jigsaw)

  • JDK 11: Тут ввели модульную систему, JPMS. Теперь вся платформа — как конструктор лего. Есть базовый модуль java.base, а остальное — по желанию. Можно собрать своё приложение с помощью jlink так, что оно будет весить, как перо, а не как этот старый монолит.
  • JDK 8: А вот тут была одна большая, жирная банка rt.jar. Всё в одной куче, как носки в шкафу у холостяка. Найти что-то — полдня, а выкинуть лишнее — нихуя.

2. Что отрезали, блядь

  • Выпилили к хуям Java EE и CORBA: Все эти java.xml.ws, java.xml.bind (JAXB) — отправили в отдельный проект Jakarta EE. Хочешь пользоваться — качай отдельно, как соус к пельменям.
  • JavaFX тоже вынесли: Теперь это отдельный проект OpenJFX. Не хочешь — не бери. Всё, как в супермаркете.

3. Новые плюшки в языке

  • var в лямбдах (с Java 10): Теперь можно и там писать var, а не явно тип указывать. Удобно, но глаза сначала разбегаются.
  • Куча новых методов в стандартных классах:
    • String: isBlank() (проверяет, не пустая ли строка или из пробелов), lines() (разбивает на строки), repeat(n) (повторяет строку, как попугай), strip() (умный trim(), который с юникодом дружит).
    • Files: readString(), writeString(). Теперь чтобы прочитать файл в строку, не нужно городить огород из BufferedReader. Красота, блядь!
    • Optional: Появился isEmpty(). Наконец-то, а то !isPresent() глаза резал.

4. Как запускать-то теперь?

  • Запуск исходников на прямую: Представляешь, можно просто написать java HelloWorld.java, и оно само скомпилирует и запустит! Магия, сука! Для мелких скриптов — просто песня.
  • Утилита javac поумнела: можно скомпилировать код под старую версию, не имея её установленной. Опция --release рулит.

5. Мусорщики (Garbage Collectors)

  • G1GC стал дефолтным вместо старого Parallel GC. Он как более умный уборщик: старается работать с меньшими паузами.
  • А старичка CMS (Concurrent Mark-Sweep) вообще выкинули на мороз. Его в девятой версии объявили устаревшим, а тут и вовсе прикончили. RIP.

6. Скорость и безопасность

  • Новые алгоритмы шифрования: Поддержка TLS 1.3, алгоритм ChaCha20-Poly1305. Всё для того, чтобы твой трафик было сложнее прослушать.
  • Улучшения под капотом: Новые реализации SHA-3, оптимизации в HashMap и ConcurrentHashMap. Всё должно работать чуть шустрее, если, конечно, ты не написал кривой код, блядь.

7. Лицензии — вот где пиздец начался!

  • Oracle взяла и поменяла правила игры: С 11-й версии их билды для продакшена стали платными по новой лицензии. Подняли всех на уши, ебать.
  • Но народ не растерялся: Появилась куча бесплатных билдов OpenJDK от других ребят: Adoptium (ранее AdoptOpenJDK, теперь Temurin), Amazon Corretto, Azul Zulu. Бери любой, они все совместимы. Главное — не нарваться на лицензионные грабли от Oracle.

Итог, блядь, практический: Переходить с 8 на 11 — дело нужное. Безопаснее, быстрее, современнее. Но готовься, что какие-то старые библиотеки, которые тащили удалённые API, могут отвалиться. Придётся искать замену или обновлять зависимости. И с лицензиями голову поломать. Но игра, в целом, стоит свеч. Главное — не бояться и тестировать всё заранее, а не когда уже всё на боевом сервере горит синим пламенем.