openjdk.ruOpenJDK на русском

JEP 519: Compact Object Headers

Compact Object Headers (компактные заголовки объектов)

ОтветственныйRoman Kennke
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск25
Компонентhotspot / runtime
Обсуждениеhotspot dash dev at openjdk dot org
ТрудоёмкостьS
ДлительностьXS
Связан сJEP 450: Compact Object Headers (Experimental)
JEP 534: Compact Object Headers by Default
РецензентыColeen Phillimore, Stefan Karlsson, Vladimir Kozlov
ОдобренVladimir Kozlov
Создан2025/04/15 14:01
Обновлён2026/04/14 15:52
Задача8354672

Аннотация

Перевести Compact Object Headers из статуса Experimental (экспериментальная функция) в штатную возможность.

Что не является целью

Цель не в том, чтобы сделать Compact Object Headers структурой заголовка объекта по умолчанию.

Мотивация

Compact Object Headers появились как альтернативная структура заголовка объекта в JEP 450 в JDK 24. Возможности такого масштаба лучше вводить осторожно и постепенно, поэтому мы ввели её в статусе Experimental.

С JDK 24 режим Compact Object Headers доказал свою стабильность и производительность.

В Oracle их протестировали, прогнав полный набор тестов JDK. В Amazon их также протестировали сотни сервисов в промышленной эксплуатации, и большинство этих сервисов используют бэкпорты этой возможности в JDK 21 и JDK 17.

Различные эксперименты показывают, что включение Compact Object Headers повышает производительность:

Пришло время перевести Compact Object Headers из статуса Experimental в штатную возможность.

Описание

В JDK 24 режим Compact Object Headers включается параметрами командной строки

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ...

Первый параметр, -XX:+UnlockExperimentalVMOptions, больше не понадобится, когда Compact Object Headers станут штатной возможностью.

Тестирование

В рамках JEP 450 Compact Object Headers прошли масштабное тестирование в дополнение к тестированию, упомянутому выше. Дополнительное тестирование не требуется.

Некоторые тесты сейчас передают параметр командной строки -XX:+UnlockExperimentalVMOptions при включении режима Compact Object Headers. Он больше не понадобится, поэтому мы соответствующим образом изменим эти тесты.

Риски и допущения

Как говорится в JEP 450, будущим возможностям могут потребоваться дополнительные биты заголовка объекта. Мы уже зарезервировали четыре бита для проекта Valhalla. Если понадобится ещё больше битов, мы сможем ещё сильнее сократить сжатые указатели на классы и хэш-коды Identity (идентичность объекта), используя методы, которые мы уже опробовали в прототипах в проекте Lilliput.