Это раздел, посвящённый теории и принципам, второй лекции «Syntax & Performance Improvements (2)» из восьмой сессии части 1 курса [Modern Backend].
В этой лекции рассматриваются строгие правила и порядок инициализации, регулирующие Flexible Constructor Bodies в Java 25, а также конфигурация Compact Object Headers и многосторонний подход к оптимизации производительности Java 25.
📌 Основные рассматриваемые темы:
-
Ограничения, связанные с требованием использовать super/this в качестве первого оператора конструктора, и появление Flexible Constructors
-
Роль области пролога: объединение логики проверки параметров и предварительной обработки до вызова конструктора суперкласса
-
Строгие правила спецификации для области пролога:
-
Разрешено: проверять параметры и выбрасывать исключения, выполнять операции с локальными переменными и присваивать начальные значения собственным полям экземпляра объекта
-
Запрещено: читать поля экземпляра, вызывать методы экземпляра, передавать ссылку this во внешние объекты и создавать нестатические внутренние классы
-
Подводные камни порядка инициализации в иерархиях наследования (вызов переопределённого метода внутри конструктора суперкласса) и различия в поведении инициализации полей в прологе
-
Флаг активации Compact Object Headers (Compact Object Headers, JEP 519)
-XX:+UseCompactObjectHeaders) и команда для проверки того, действительно ли он был применён -
Границы и классификация улучшений производительности Java 25:
-
Ось времени (сокращение времени запуска и прогрева — кэш AOT, который будет рассмотрен позже, в части 3, вместе с GraalVM)
-
Ось памяти (сокращение использования памяти кучи, уменьшение частоты GC и пауз STW, а также повышение долгосрочной пропускной способности)
-
Формирование критериев диагностики узких мест производительности с точки зрения backend-инженера (время запуска по сравнению с использованием памяти кучи и нагрузкой на GC)
Сформировать глубокое понимание гибкости синтаксиса языка и принципов настройки памяти на уровне JVM.