2011-01-24 19 views
7

¿Hay algo en la línea de punteros inteligentes C++ en Java?¿Hay "punteros inteligentes" en Java?

+0

Creo que puede estar confundiendo algo allí. Los punteros inteligentes son un envoltorio alrededor de punteros crudos que proporcionan, p. recuento de referencias o comprobación de límites. Java no tiene punteros crudos y tiene GC incorporado. – delnan

+0

Consulte la explicación en Wikipedia de los punteros inteligentes para obtener más información: http://en.wikipedia.org/wiki/Smart_pointer –

+1

La implementación del lenguaje en sí misma (la JVM) se hace cargo de la mayoría (si no todos) los trabajos generalmente manejados por punteros inteligentes en C++. –

Respuesta

12

Todos los 'indicadores' (referencias) de Java son Smart Pointers.

Java se ejecuta en un entorno administrado. Lo que significa que Java usa un recolector de basura para limpiar las variables que ya no se referencian más.

Sin embargo, las referencias de Java son ligeramente diferentes de las de los indicadores. Java abstrae todos los valores del puntero y las matemáticas que ve en C++. Por lo tanto, cada vez que crea un nuevo objeto y lo almacena en una variable, lo almacena en la versión de Java de un "puntero inteligente".

+1

Es posible que desee elaborar sobre cuál es la diferencia entre las referencias de Java y los punteros inteligentes de C++. – Pacerier

+0

punteros inteligentes dan el control del desarrollador cuando están libres y se llama al destructor. Para la programación de baja latencia, eliminan los "nervios" en el tiempo de respuesta que son comunes en Java. punteros automáticos hacen eso también, y uno mejor: al colocar el objeto real en la pila en lugar de cualquier parte del montón está disponible, proporcionan una mejor ubicación. Ambas son las características que lamento no están disponibles en Java. –

3

No, no hay punteros de ninguna clase en Java. En general, no necesita punteros inteligentes porque ya tiene recolector de basura en su lugar haciendo recuento de referencias para administrar automáticamente el ciclo de asignación/liberación de memoria.

+0

@ pablo-tx ... de modo que solo los recolectores de basura ayudan en la administración de la memoria? – garima

+2

Esto no es exactamente cierto: un objeto en java ** es ** un puntero al recurso real. –

+0

@garima: no estoy seguro de entender su pregunta, pero SÍ: los recolectores de basura ayudan en la administración de la memoria. –

5

Sí y no. No en eso, nada como un objeto puntero existe en Java. Sí, en el sentido de que cada objeto es un "puntero inteligente", lo que significa que está sujeto a la recolección de basura y se ocupa de su propia vida, por así decirlo.

6

Solo he oído hablar de punteros inteligentes en el contexto de la gestión de memoria. Como la administración de memoria es el núcleo de la plataforma Java, obviamente no hay necesidad de eso.

Las coincidencias más cercanas que se me ocurren son java.lang.ref.WeakReference y java.lang.ref.SoftReference, ya que permiten personalizar la recolección de elementos no utilizados hasta cierto punto.

Cuestiones relacionadas