Начиная с Java 14, Project Valhala представил тип значения (или встроенный тип), ссылка: Valhalla:откройте JDK.java.net/projects/VA… , Тип значения здесь не обсуждается, это тип записи.
Во-первых, объекты Javaкуча памятиСтруктуры в памяти включают в себя:
- Указатель типа:Указатель на информацию о классе, описывающую тип объекта.
- Отметить слово:Набор флагов, описывающих состояние объекта, включая хэш-код объекта (если есть), форму объекта (если это массив), состояние блокировки и длину массива (если флаг показывает что объект представляет собой массив, длина массива описана)
- Заполнение выравнивания:Все объекты выровнены по 8 байтам -> То есть начальная позиция всех объектов должна удовлетворять A (A%8==0), поэтому для некоторых объектов требуется это дополнение выравнивания, чтобы удовлетворить этому правилу.
- Область переменной домена:Память, занимаемая переменными домена этого объекта. Существует два типа переменных полей Java: примитивные типы и обычные указатели на объекты.
Затем информация о типе объекта Java сохраняется в метапространстве Java.По умолчанию (когда включен сжатый указатель класса) сжатый указатель класса заголовка объекта указывает на пространство классов MetaSpace, и различные данные указателя хранится в пространстве класса.Например, vtable и itable, которые реализуют полиморфизм методов и виртуальный вызов, содержат ссылочный указатель на адрес кода метода. Неклассовое пространство хранит относительно большие метаданные, такие как константный пул, байт-код, скомпилированный JIT-код и т. д. Поскольку скомпилированный код может быть очень большим, а JVM может динамически загружать множество классов для расширения многоязычной поддержки, поэтомуОтличать классовое пространство MetaSpace от неклассового пространства.