Я работаю над статьей о внутренних компонентах Oracle HotSpot и GC, но меня смущает значение ООП (обычный указатель объекта).
В документации Oracle указано, что OOP — это 32- или 64-битный указатель на структуру данных объекта в куче:
«oop», или обычный указатель объекта на языке Java Hotspot, является управляемым указателем на объект. oop обычно имеет тот же размер, что и машинный указатель.
Его можно сжать, но это не проблема.
Я хотел найти статьи об этой структуре данных, но тут началась путаница.
В некоторых статьях говорится, что ООП на самом деле является самой структурой данных, а не указателем!
Некоторые другие статьи кажутся противоречивыми по этому поводу, например на infoq.com. Сначала он утверждает, что ООП является указателем:
ООП — это настоящий указатель в смысле C/C++ — машинное слово, указывающее на ячейку памяти внутри кучи Java.
но после этого пишет:
OOP состоит из двух машинных слов заголовка, которые называются словами Mark и Klass, за которыми следуют поля-члены этого экземпляра.
Значит, указатель состоит из полей заголовка и поля-члена? Это не может быть правдой.
Наконец, я попытался посмотреть исходный код Oracle JDK и исходный код OpenJDK HotSpot (потому что Oracle HotSpot не является открытым исходным кодом). Но исходя из этого казалось, что ООП действительно является структурой данных объекта. Но в этом случае что такое указатель?
Итак, вопрос: что такое ООП в HotSpot JVM?