Не могли бы вы как можно полнее описать структуру объекта в памяти JVM?

Java

Начиная с Java 14, Project Valhala представил тип значения (или встроенный тип), ссылка: Valhalla:откройте JDK.java.net/projects/VA… , Тип значения здесь не обсуждается, это тип записи.

Во-первых, объекты Javaкуча памятиСтруктуры в памяти включают в себя:

  1. Указатель типа:Указатель на информацию о классе, описывающую тип объекта.
  2. Отметить слово:Набор флагов, описывающих состояние объекта, включая хэш-код объекта (если есть), форму объекта (если это массив), состояние блокировки и длину массива (если флаг показывает что объект представляет собой массив, длина массива описана)
  3. Заполнение выравнивания:Все объекты выровнены по 8 байтам -> То есть начальная позиция всех объектов должна удовлетворять A (A%8==0), поэтому для некоторых объектов требуется это дополнение выравнивания, чтобы удовлетворить этому правилу.
  4. Область переменной домена:Память, занимаемая переменными домена этого объекта. Существует два типа переменных полей Java: примитивные типы и обычные указатели на объекты.

Затем информация о типе объекта Java сохраняется в метапространстве Java.По умолчанию (когда включен сжатый указатель класса) сжатый указатель класса заголовка объекта указывает на пространство классов MetaSpace, и различные данные указателя хранится в пространстве класса.Например, vtable и itable, которые реализуют полиморфизм методов и виртуальный вызов, содержат ссылочный указатель на адрес кода метода. Неклассовое пространство хранит относительно большие метаданные, такие как константный пул, байт-код, скомпилированный JIT-код и т. д. Поскольку скомпилированный код может быть очень большим, а JVM может динамически загружать множество классов для расширения многоязычной поддержки, поэтомуОтличать классовое пространство MetaSpace от неклассового пространства.

MetaSpace