Что делает Oop Maps в виртуальной точке Hotspot точно

Я прочитал из некоторых документов, что Hotspot VM использует структуру данных, называемую Oop Maps, для управления всеми ООП в виртуальной машине. Мой вопрос в том, что, когда генерируется эта структура данных Oop Map? Во время компиляции или времени выполнения? Любые дальнейшие подробные документы, касающиеся этого, будут более чем приветствоваться. Спасибо, ребята.

Ответ 1

OopMap - это структура, которая записывает, где ссылки на объекты (ООП) расположены в стеке Java. Его основная цель - найти корни GC на стеках Java и обновлять ссылки всякий раз, когда объекты перемещаются внутри кучи.

Существует три типа OopMaps:

  • OopMaps для интерпретируемых методов. Они вычисляются лениво, т.е. Когда GC происходит, анализируя поток байт-кода.
  • OopMaps для JIT-скомпилированных методов. Они генерируются во время JIT-компиляции и сохраняются вместе с скомпилированным кодом, чтобы виртуальная машина могла быстро найти по инструкции адрес расположения стека и регистры, где хранятся ссылки на объекты.
  • OopMaps для сгенерированных общих оболочек времени выполнения. Эти карты создаются вручную разработчиками - авторами этих врезок времени выполнения.