una que programacion poo pasar orientada objetos objeto metodos entre ejemplos clonar clases clase atributos atributo actividades java object reference implementation

que - ¿Cómo se implementa la referencia al objeto java?



que es un objeto en java (5)

De hecho, puede obtener el código fuente desde aquí: http://download.java.net/jdk6/source/

La respuesta breve a su pregunta es: sí, hay un puntero a una ubicación de memoria para sus variables Java (y un poco más). Sin embargo, esta es una simplificación excesiva gigantesca. Hay muchos muchos objetos C ++ involucrados en mover variables Java en la máquina virtual. Si quieres ensuciarte, echa un vistazo al paquete hotspot / src / share / vm / oops.

En la práctica, nada de esto importa para el desarrollo de Java, ya que no tiene una forma directa de trabajar con él (y en segundo lugar, no lo desea, la JVM está optimizada para varias arquitecturas de procesador).

¿Se utiliza el puntero para implementar la variable de referencia java o cómo se implementa realmente? A continuación están las líneas de la especificación del lenguaje Java

4.3.1 Objetos Un objeto es una instancia de clase o una matriz. Los valores de referencia (a menudo solo referencias) son punteros a estos objetos, y una referencia nula especial, que se refiere a ningún objeto.

¿Eso significa que es un puntero todo el tiempo?


En las JVM modernas, las referencias se implementan como una dirección.

Volviendo a la primera versión de HotSpot (y un poco antes para la "VM clásica"), las referencias se implementaron como identificadores. Ese es un puntero fijo a un puntero. El primer puntero nunca cambia para ningún objeto en particular, pero a medida que se mueven los datos del objeto, se cambia el segundo puntero. Obviamente, esto afecta el rendimiento en uso, pero es más fácil escribir un GC para.

En las últimas versiones de JDK7 hay soporte para "oops comprimidos". Creo que BEA JRockit ha tenido esto por un tiempo. Pasar a sistemas de 64 bits requiere el doble de memoria y, por lo tanto, ancho de banda para las direcciones. "Oops comprimidos" aprovecha los tres o cuatro bits de dirección menos significativos siempre siendo cero. 32 bits de datos se desplazan a la izquierda tres o cuatro bits, lo que permite 32 o 64 GB de almacenamiento en lugar de 4 GB.


La respuesta dependerá de cada implementación de JVM, pero la mejor manera de pensarlo es como un control. Es un valor que la JVM puede buscar en una tabla o en alguna otra implementación similar, la ubicación de la memoria de la referencia. De esta forma, la JVM puede mover objetos en la memoria durante la recolección de basura sin cambiar los punteros de memoria en todas partes.


Un tipo primitivo siempre se pasa por valor. donde como una variable de clase es en realidad una variable de referencia para el objeto.

Considera un tipo primitivo:

int i=0;

ahora el valor de este tipo primitivo se almacena en una ubicación de memoria de la dirección 2068. Cada vez que utiliza este tipo primitivo como parámetro, se crea una copia nueva ya que no pasa por referencia sino que pasa por valor.

Ahora considere una variable de clase:

MyClass C1 = new MyClass();

Ahora esto crea un objeto de la clase tipo MyClass con un nombre de variable C1.

La variable de clase C1 contiene una dirección de la ubicación de memoria del objeto que está vinculada a Valriable C1. Entonces, básicamente, la variable de clase C1 apunta a la ubicación del objeto (nueva MyClass ()).

Y los tipos primitivos se almacenan en la pila y los objetos en montones.


¿Eso significa que es un puntero todo el tiempo?

Sí, pero no puede ser manipulado como lo hace normalmente en C.

Tenga en cuenta que al ser Java un lenguaje de programación diferente que depende de su máquina virtual, este concepto (puntero) debería usarse solo como una analogía para comprender mejor el comportamiento de tales artefactos.