¿Qué es la recolección de basura en Java?
¿Qué es la recolección de basura en Java?
Recolección de basura en Java es un proceso mediante el cual los programas realizan la gestión de la memoria de forma automática. El Garbage Collector (GC) encuentra los objetos no utilizados y los elimina para recuperar la memoria. En Java, la asignación de memoria dinámica de objetos se logra mediante el operador new que usa algo de memoria y la memoria permanece asignada hasta que haya referencias para el uso del objeto.
Cuando no hay referencias a un objeto, se supone que ya no se necesita y se puede recuperar la memoria ocupada por el objeto. No hay una necesidad explícita de destruir un objeto ya que Java maneja la desasignación automáticamente.
La técnica que logra esto se conoce como recolección de basura. . Los programas que no desasignan memoria pueden fallar eventualmente cuando no queda memoria en el sistema para asignar. Se dice que estos programas tienen pérdidas de memoria.
La recolección de basura en Java ocurre automáticamente durante la vida útil del programa, lo que elimina la necesidad de desasignar memoria y, por lo tanto, evita pérdidas de memoria.
En lenguaje C, es responsabilidad del programador desasignar la memoria asignada dinámicamente usando la función free(). Aquí es donde conduce la gestión de la memoria de Java.
Nota:Todos los objetos se crean en Heap Sección de la memoria. Más sobre esto en un tutorial posterior.
Ejemplo:Para aprender el mecanismo del recolector de basura en Java
Paso 1) Copie el siguiente código en un editor.
class Student{ int a; int b; public void setData(int c,int d){ a=c; b=d; } public void showData(){ System.out.println("Value of a = "+a); System.out.println("Value of b = "+b); } public static void main(String args[]){ Student s1 = new Student(); Student s2 = new Student(); s1.setData(1,2); s2.setData(3,4); s1.showData(); s2.showData(); //Student s3; //s3=s2; //s3.showData(); //s2=null; //s3.showData(); //s3=null; //s3.showData(); } }
Paso 2) Guarde, compile y ejecute el código. Como se muestra en el diagrama, se crean dos objetos y dos variables de referencia.
Paso 3) Descomente la línea # 20,21,22. Guarde, compile y ejecute el código.
Paso 4) Como se muestra en el siguiente diagrama, dos variables de referencia apuntan al mismo objeto.
Paso 5) Descomente las líneas n.° 23 y 24. Compile, guarde y ejecute el código
Paso 6) Como se muestra en el diagrama a continuación, s2 se vuelve nulo, pero s3 aún apunta al objeto y no es elegible para la recolección de elementos no utilizados de Java.
Paso 7) Descomente las líneas n.° 25 y 26. Guarde, compile y ejecute el código
Paso 8) En este punto, no hay referencias que apunten al objeto y se vuelve elegible para la recolección de elementos no utilizados. Se eliminará de la memoria y no habrá forma de recuperarlo.
¿Cómo eliminar un objeto en Java?
1) Si desea que su objeto sea apto para la recolección de elementos no utilizados, asigne su variable de referencia a nulo.
2) Los tipos primitivos no son objetos. No se pueden asignar nulos.
Java
- Operadores Java
- Interfaz Java
- Prueba de Java con recursos
- Anotaciones Java
- Variable estática en Java:¿Qué es el bloque estático y el método? [Ejemplo]
- Interfaz vs clase abstracta en Java:¿cuál es la diferencia?
- Sobrecarga de constructores en Java:qué es y ejemplos de programas
- Java - Marco de colecciones
- Java 10 - Recolección de basura mejorada
- Java 10 - Asignación de montones
- Java 9 - Métodos de fábrica de colecciones