Подготовили перевод офигенной истории от разработчика HotSpot.
Во время работы над Project Valhalla у него начали самопроизвольно пропадать Java-объекты и классы — без участия GC, без крэшей JVM, просто
AssertionError, NoClassDefFoundError и странные null там, где им вообще неоткуда взяться.Дальше начинается настоящий отладочный квест: разбор
markWord и Compact Object Headers, эксперименты с флагами JVM, попытка изолировать баг между интерпретатором, C1 и C2, майнинг логов -XX:+PrintCompilation и CompileCommand, поиск подозрительных intrinsic-ов и, в итоге, выход на одну-единственную битовую маску, которая смотрела в указатель, а не в метаданные объекта.История классная сразу в нескольких смыслах:
— по пути узнаёте, как реально устроены заголовки объектов в HotSpot и что делает Valhalla
— видите живой пример miscompilation в C2 и то, как её можно отловить
— получаете небольшой мастер-класс по методичной отладке больших систем: от минимизации тестов до аккуратной проверки гипотез
Ну а с концовки мы посмеялись) Аккуратнее, спойлер!!!
Почему объекты превращались в null и почему классы «не находились» — я не знаю.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/973214/
