Что внутри ссылочной переменной в Java?

Мы знаем, что переменная ссылки на объект содержит биты, которые представляют способ доступа к объекту.

Он не содержит сам объект, но содержит что-то вроде указателя или адреса.

Я просматривал книгу «Head-First Java» (2-е издание), и в книге написано (в главе 3, стр. 54), что

В Java мы действительно не знаем, что такое s внутри ссылочной переменной в Java? Мы знаем, что ссылочная переменная объекта содержит биты, которые представляют способ доступа к объекту. Он не содержит сам объект, но содержит что-то вроде указателя или адреса. Я собирался ...

Мы знаем, что переменная ссылки на объект содержит биты, которые представляют способ доступа к объекту.

Он не содержит сам объект, но содержит что-то вроде указателя или адреса.

Я просматривал книгу «Head-First Java» (2-е издание), и в книге написано (в главе 3, стр. 54), что

В Java мы действительно не знаем, что такое s внутри ссылочной переменной в Java? Мы знаем, что ссылочная переменная объекта содержит биты, которые представляют способ доступа к объекту. Он не содержит сам объект, но содержит что-то вроде указателя или адреса. Я собирался ...

Мы знаем, что переменная ссылки на объект содержит биты, которые представляют способ доступа к объекту.

Он не содержит сам объект, но содержит что-то вроде указателя или адреса.

Я просматривал книгу «Head-First Java» (2-е издание), и в книге написано (в главе 3, стр. 54), что

В Java мы действительно не знаем, что такое внутри ссылочной переменной. Мы делаем знаю, что бы это ни было, это представляет один и только один объект. И JVM знает, как использовать ссылка, чтобы добраться до объекта. -

Я хочу спросить:

  • Содержит ли переменная ссылки на объект указатель, адрес или что?
  • Как JVM интерпретирует это?
7
задан Ingo Karkat 2 January 2013 в 11:34
поделиться

4 ответа

Это полностью зависит от JVM, чтобы определить, что входит в ссылку.

В простейшем случае это был бы просто указатель (то есть адрес). В более сложных случаях виртуальная машина может использовать разные представления в зависимости от ситуации - например, вы можете прочитать статью на «Сжатые ошибки в HotSpot» , чтобы узнать, как виртуальная машина HotSpot может избежать удвоения размера. ссылок в некоторых (но не во всех) местах при работе в качестве 64-битной виртуальной машины.

Важно то, что вы не должны ни знать, ни заботиться. Что касается вас, как программиста, это просто непрозрачный набор битов - его единственная цель - позволить вам добраться до рассматриваемого объекта (или идентифицировать нулевую ссылку).

12
ответ дан 6 December 2019 в 11:45
поделиться

Это зависит от JVM. Ссылка Java не гарантирует никакой семантики, кроме того, что вы можете получить доступ к объекту через нее. Sunacle может поступить иначе с IBM.

На практике часто это может быть какой-то указатель, хотя, возможно, и не напрямую на объект, поскольку он может быть перемещен сборщиком мусора.

3
ответ дан 6 December 2019 в 11:45
поделиться

Это полностью зависит от JVM. Это может быть адрес, указатель или что-то более сложное. У вас нет или необходимости в каких-либо более жестких гарантиях, чем тот факт, что вы можете получить объект, используя ссылку.

2
ответ дан 6 December 2019 в 11:45
поделиться

Именно JVM решает, как именно реализована ссылка.

Сказав это, любая «нормальная» реализация, вероятно, будет использовать либо прямой указатель, либо некоторую форму сжатого указателя по соображениям производительности. Я считаю, что это применимо ко всем текущим производственным JVM.

0
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: