2010-08-10 25 views
6

Sabemos que la variable de referencia del objeto contiene bits que representan una forma de acceder a un objeto.¿Qué hay dentro de una variable de referencia en Java?

No contiene el objeto en sí, pero tiene algo así como un puntero o una dirección.

yo estaba pasando por el libro de cabeza de Java (2ª edición) y en el libro está escrito (en el Capítulo 3, página 54) que

En Java no se sabe muy bien lo que es dentro de una variable de referencia. Hacemos sabemos que sea lo que sea, representa un solo objeto. Y la JVM sabe cómo utilizar la referencia para acceder al objeto. -

quiero preguntar:

  • Haz una variable de referencia de objeto mantiene puntero, dirección o qué?
  • ¿Cómo lo interpreta JVM?
+1

Echa un vistazo a una implementación abierta como OpenJDK si eres tan curioso :) – KeatsPeeks

+0

No, no es curioso :) solo un principiante en Java. –

Respuesta

11

Es responsabilidad exclusiva de la JVM determinar qué se incluye en una referencia.

En el caso más simple, solo sería un puntero (es decir, una dirección). En casos más sofisticados, la máquina virtual puede usar diferentes representaciones dependiendo de la situación; por ejemplo, puede leer el documento en "Compressed oops in HotSpot" para ver cómo la máquina virtual HotSpot puede evitar duplicar el tamaño de las referencias en algunos (pero no todos) lugares cuando funcionando como una VM de 64 bits.

Lo importante es que no debe saber ni preocuparse. En lo que a usted respecta como programador, es solo un conjunto opaco de bits: su único propósito es permitirle llegar al objeto en cuestión (o identificar una referencia nula).

+0

Bien, gracias :) –

3

Eso depende de la JVM. No se garantiza que una referencia Java tenga ninguna semántica, además de que puede acceder a un objeto a través de ella. Sunacle podría hacer eso de manera diferente a IBM también.

En la práctica, a menudo puede ser un puntero de algún tipo, aunque tal vez no directamente al objeto, ya que puede ser movido por el GC.

+0

Una pregunta legítima sería "cómo se implementan las referencias en 's de JVM". – KeatsPeeks

+2

@Samuel: depende de cómo defina "legítimo". A menos que esté buscando modificar la JVM en sí misma, no hay un uso práctico para esta información. La curiosidad está bien, pero este tipo de preguntas siempre me hacen pensar que alguien se aferra a una mentalidad C. –

2

Es completamente específico de JVM. Puede ser una dirección, un puntero o algo más complicado. No tiene ni necesita garantías más duras que el hecho de que puede obtener un Objeto usando la referencia.

0

Depende de la JVM decidir exactamente cómo se implementa la referencia.

Habiendo dicho eso, cualquier implementación "sensata" probablemente usaría un puntero directo o alguna forma de puntero comprimido por razones de rendimiento. Creo que esto se aplica a todas las JVM de producción actuales.

Cuestiones relacionadas