Команда Spring АйО представляет одну немаловажную фичу Java 25: компактные заголовки объектов (Compact Object Headers). Это позволит JVM экономить память и ускоряться без вмешательства в код.

Что это такое?

У каждого объекта в Java есть заголовок — служебные данные, которые JVM использует для синхронизации, GC и т.д. Обычно заголовок занимает 96 бит (12 байт) на 64-битных платформах.

С JEP 450 в Java 24 появится экспериментальная опция сжать заголовки до 64 бит (8 байт). JEP 519 делает это стабильной, проверенной фичей, которую можно безопасно включать прямо в проде.

Зачем?

  • Минус 22% памяти в SPECjbb2015

  • Минус 8% CPU в среднем

  • Минус 15% сборок мусора в G1 и Parallel GC

  • +10% скорость парсинга JSON

Для распределённых систем, высоконагруженных сервисов и микросервисов — это простой способ сэкономить ресурсы без переписывания кода.

Как включить?

В Java 25 больше не понадобится флаг 

-XX:+UnlockExperimentalVMOptions 

Теперь достаточно:

java -XX:+UseCompactObjectHeaders ... 

Пруфы?

  • Протестировано в проде на сотнях сервисов Amazon.

  • Прогнано по полному тест-сьюту JDK в Oracle.

  • Отдельные компании уже бэкпортят фичу на JDK 21 и 17.

Что важно знать?

  • По умолчанию выключено.

  • Не влияет на функциональность приложения.

  • Может потребовать внимания в будущем, если другие фичи потребуют больше битов в заголовке (но для этого есть решения в рамках проектов Valhalla и Lilliput).

Обсудим в комментариях? ?


Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано

Комментарии (3)


  1. TimurZhoraev
    29.07.2025 18:28

    Обычно unused/reserved в заголовках объектов и даже байт-кода виртуальных машин используют для отладки, особенно на многопоточке, сопоставляя с идентификаторами, плюс возможность исключения циклических ссылок при очистке памяти, плюс пометка сборщиком мусора, временные объекты, кешированные, в процессе получения данных по асинхронке или сериализации. Интересно как с точки зрения этих аспектов дела обстоят при такой оптимизации


  1. Gromilo
    29.07.2025 18:28

    Теперь визуально видно на сколько меньше
    Теперь визуально видно на сколько меньше


    1. Gromilo
      29.07.2025 18:28

      Самое прикольное, что хабр отображает картинку вот так, и мне пришлось считать биты, чтобы понять насколько стало меньше

      Скрытый текст
      Видите 64 бита снизу? И я нет
      Видите 64 бита снизу? И я нет