Categorías
Memory

Recolección de basura Java Force – Ejemplo de código

No se puede aplicar la recolección de basura en Java. Pero aún así, a veces, llamamos al método System.gc () explícitamente. El método System.gc () proporciona solo una «pista» a la JVM de que se debe ejecutar la recolección de basura. ¡No está garantizado!

La documentación de la API para System.gc () establece que «Cuando el control regresa de la llamada al método, la máquina virtual Java ha hecho un gran esfuerzo para recuperar espacio de todos los objetos descartados». La responsabilidad del programador es asegurarse de que no queden referencias para los objetos.

El programa siguiente muestra que la recolección de basura puede ejecutarse después de que se llame a System.gc (). Nuevamente, NO está garantizado.

public class GCTest {
	public static void main(String[] args) throws InterruptedException {
		A a = new A("white");
		a = null;
 
		Runtime.getRuntime().gc();
	}
}
 
class A {
	private String color;
 
	public A(String color) {
		this.color = color;
	}
 
	@Override
	public void finalize() {
		System.out.println(this.color + " cleaned");
	}
}

Por lo tanto, el programa puede generar o no lo siguiente:

white cleaned

El siguiente programa muestra que la recolección de basura funciona automáticamente detrás sin System.gc () llamado.

public class GCTest {
	public static void main(String[] args) throws InterruptedException {
		A a = new A("white");
 
		for (int i = 0; i < 10000000; i++) {
			if (i % 2 == 1) {
				a = new A("red");
			} else {
				a = new A("green");
			}
			a = null;
		}
	}
}
 
class A {
	private String color;
 
	public A(String color) {
		this.color = color;
	}
 
	@Override
	public void finalize() {
		System.out.println(this.color + " cleaned");
	}
}
  Áreas de datos en tiempo de ejecución de JVM

Producirá algo como lo siguiente:

...
green cleaned
green cleaned
red cleaned
red cleaned
green cleaned
green cleaned
red cleaned
red cleaned
green cleaned
green cleaned
red cleaned
red cleaned
...

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *