Un objeto es elegible para ser recolectado como basura si su variable de referencia se pierde del programa durante la ejecución. A veces también se les llama objetos inalcanzables .
¿Qué es la referencia de un objeto?
El operador new asigna dinámicamente memoria para un objeto y devuelve una referencia a él. Esta referencia es la dirección en memoria del objeto asignado por new. Una referencia es una dirección que indica dónde se almacenan las variables, métodos, etc. de un objeto.
Los objetos no se utilizan realmente cuando se asignan a una variable o se pasan como argumento a un método. Las referencias a objetos se utilizan en todas partes. Ejemplo:
Box mybox = new Box(); //referencing to object
Rol de un objeto inalcanzable en Java
En Java, la memoria asignada en tiempo de ejecución, es decir, el área de almacenamiento dinámico, puede liberarse mediante el proceso de recolección de elementos no utilizados. No es más que un método para liberar la memoria que no está siendo utilizada por el programador. Solo los objetos que ya no tienen referencia a ellos son elegibles para la recolección de basura en Java.
Formas de hacer que un objeto sea elegible para la recolección de basura:
Tenga en cuenta que el objeto no puede convertirse en candidato para la recolección de basura hasta que se descarten todas las referencias a él.
- Objeto creado dentro de un método: cuando se llama a un método, va dentro del marco de la pila. Cuando el método se extrae de la pila, todos sus miembros mueren y si se crearon algunos objetos dentro de él, estos objetos se vuelven inalcanzables o anónimos después de la ejecución del método y, por lo tanto, se vuelven elegibles para la recolección de basura
. Ejemplo:/* Java program to demonstrate that
objects created inside a method will becomes
eligible for gc after method execution terminate */
class
Test
{
// to store object name
String obj_name;
public
Test(String obj_name)
{
this
.obj_name = obj_name;
}
static
void
show()
{
//object t1 inside method becomes unreachable when show() removed
Test t1 =
new
Test(
"t1"
);
display();
}
static
void
display()
{
//object t2 inside method becomes unreachable when display() removed
Test t2 =
new
Test(
"t2"
);
}
// Driver method
public
static
void
main(String args[])
{
// calling show()
show();
// calling garbage collector
System.gc();
}
@Override
/* Overriding finalize method to check which object
is garbage collected */
protected
void
finalize()
throws
Throwable
{
// will print name of object
System.out.println(
this
.obj_name +
" successfully garbage collected"
);
}
}
Producción:
t2 successfully garbage collected t1 successfully garbage collected
Nota: si un método devuelve el objeto creado dentro de él y almacenamos esta referencia de objeto utilizando una variable de tipo de referencia, entonces ya no es elegible para la recolección de elementos no utilizados.
- Reasignación de la variable de referencia: cuando la identificación de referencia de un objeto se relaciona con la identificación de referencia de algún otro objeto, el objeto anterior ya no tiene ninguna referencia a él y se vuelve inalcanzable y, por lo tanto, se vuelve elegible para la recolección de basura. Ejemplo:
/* Java program to demonstrate gc
when one object referred to other object */
class
Test
{
// to store object name
String obj_name;
public
Test(String obj_name)
{
this
.obj_name = obj_name;
}
// Driver method
public
static
void
main(String args[])
{
Test t1 =
new
Test(
"t1"
);
Test t2 =
new
Test(
"t2"
);
//t1 now referred to t2
t1 = t2;
// calling garbage collector
System.gc();
}
@Override
/* Overriding finalize method to check which object
is garbage collected */
protected
void
finalize()
throws
Throwable
{
// will print name of object
System.out.println(
this
.obj_name +
" successfully garbage collected"
);
}
}
Producción:
t1 successfully garbage collected
- Anulación de la variable de referencia: cuando todas las variables de referencia de un objeto se cambian a NULL, se vuelve inalcanzable y, por lo tanto, se vuelve elegible para la recolección de basura. Ejemplo:
/* Java program to demonstrate gc
when object reference changed to NULL */
class
Test
{
// to store object name
String obj_name;
public
Test(String obj_name)
{
this
.obj_name = obj_name;
}
// Driver method
public
static
void
main(String args[])
{
Test t1 =
new
Test(
"t1"
);
/* t1 being used for some purpose in program */
/* When there is no more use of t1, make the object
referred by t1 eligible for garbage collection */
t1 =
null
;
// calling garbage collector
System.gc();
}
@Override
/* Overriding finalize method to check which object
is garbage collected */
protected
void
finalize()
throws
Throwable
{
// will print name of object
System.out.println(
this
.obj_name +
" successfully garbage collected"
);
}
}
Producción:
t1 successfully garbage collected
- Objeto anónimo: la identificación de referencia de un objeto anónimo no se almacena en ningún lugar. Por lo tanto, se vuelve inalcanzable.
Ejemplo:/* Java program to demonstrate gc
of anonymous objects */
class
Test
{
// to store object name
String obj_name;
public
Test(String obj_name)
{
this
.obj_name = obj_name;
}
// Driver method
public
static
void
main(String args[])
{
//anonymous object without reference id
new
Test(
"t1"
);
// calling garbage collector
System.gc();
}
@Override
/* Overriding finalize method to check which object
is garbage collected */
protected
void
finalize()
throws
Throwable
{
// will print name of object
System.out.println(
this
.obj_name +
" successfully garbage collected"
);
}
}
Producción:
t1 successfully garbage collected
Artículo Relacionado: Isla del Aislamiento
Este artículo es una contribución de Apoorva Singh y Gaurav Miglani . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA