Подтвердить что ты не робот

Что такое Klass & KlassKlass

Что такое Klass и KlassKlass в реализации JVM Hotspot?

Насколько я понял из статьи Представляя Пермское поколение, Klass является внутренним представлением класса Java (скажем A), и он будет содержать основную информацию о структуре класса, включая байт-код. Он будет храниться как сам объект. Каждый объект класса A будет иметь указатель на внутреннее представление Klass, присутствующее в PermGen

KlassKlass - это внутреннее представление самого класса Klass. Почему требуется KlassKlass? Какую дополнительную информацию он хранит?

Кроме того, указатель KlassKlass's Klass указывает на себя, я тоже этого не понял.

4b9b3361

Ответ 1

Постоянное поколение a.k.a permgen - это ссылка на место, где хранится вся относящаяся к классу информация. Иногда это называют областью метода.

Давайте рассмотрим пример следующего кода:

public class Parent
{
    ...
}

Здесь:

  • new Parent() является объектом класса Parent.
  • (new Parent()).getClass() относится к Klass для родителя. Тип ссылки для этого объекта будет java.lang.Class<Parent>. Это сохранит информацию о Parent аннотации, конструкторы, поля, методы, его наследование (суперкласс, интерфейсы) и т.д.
  • Класс KlassKlass будет (new Parent()).getClass().getClass(). Тип ссылки для этого объекта будет java.lang.Class<java.lang.Class>. Это определяет информацию о java.lang.Class аннотации, конструкторы, поля, методы, его наследование (суперкласс, интерфейсы) и т.д.

Теоретически эта цепочка может продолжаться, но класс KlassKlassKlass будет таким же, как KlassKlass.

Включение, KlassKlass означает, что у вас будет один объект java.lang.Class, который определяет поведение самого java.lang.Class.

Надеюсь, что это поможет

Ответ 2

У вас, похоже, хорошее понимание управления хранилищами в HotSpot. Чтобы получить более конкретные детали, неплохо пойти на лошадиный рот - в этом случае разработчики HotSpot. Эта страница - это описание системы управления хранением.

В ситуациях, когда я хочу узнать, какой код я пытаюсь найти и найти код и прочитать его. В этом случае мы можем найти реализацию класса KlassKlass здесь. Это, похоже, не добавляет дополнительную информацию поверх Klass - что очень интересно посмотреть. Обратите внимание, что KlassKlass продолжается Klass.

Так зачем нам это нужно? Ну, мы можем выделить иерархию Klass конкретной программы как дерево, где один Klass описывает другой. Все нуждается в описании, но мы не можем продолжать это так навсегда, нам нужно найти фиксированную точку, где вещь, которую мы используем для описания чего-либо, сама - поэтому мы можем остановиться!

Итак, в резюме KlassKlass не делает ничего более полезного, чем существующее. Он должен существовать, но его существование разумно неинтересно.

Ответ 3

Класс может быть определен как шаблон/синяя печать, описывающая поведение/состояния, которые поддерживает объект своего типа.