Когда вы распаковываете объект, где хранится тип данных объектов, чтобы компилятор мог выполнять приведение? - PullRequest
1 голос
/ 11 января 2010

Внутренне говоря, когда вы приводите объект к строго типизированному объекту, например:

User u = (User)o;

Где хранится тип объекта? хранится ли он в другом месте или в блоке памяти, где хранится фактический объект?

(я не знаю много об этой теме, поэтому я вполне мог бы задать вопрос, который не имеет полного смысла, но я надеюсь, что вы поняли его суть)

Ответы [ 2 ]

3 голосов
/ 11 января 2010

Заголовок каждого объекта содержит ссылку на тип самого производного класса реализации. Очень похоже на "vtbl" в C ++. Обычно это будет структура «С», а не объект Java. Я считаю, что 64-разрядная версия Hotspot от Azul использует 32-разрядный компактный указатель для сокращения размера заголовка.

0 голосов
/ 11 января 2010

Не вдаваясь в подробности, во внутреннем представлении класса Java есть нечто, называемое пул констант , в котором хранятся дескрипторы для классов и методов. Сначала это символические ссылки, которые разрешаются по требованию (т.е. при первом доступе).

Из спецификации JVM, описывающей связывание:

Связывание - это процесс принятия двоичная форма класса или интерфейса введите и объедините его во время выполнения состояние виртуальной машины Java, так что это может быть выполнено. Класс или тип интерфейса всегда загружается раньше это связано.

Таким образом, фактическая информация о типе для ссылочного типа хранится отдельно от класса, на который вы ссылаетесь.

Если вам интересно, вот ссылка на информацию о классе: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#1221

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...