¿Cómo juzgar si el sujeto está muerto? (Dos métodos)

¿Cómo juzgar si el sujeto está muerto? (Dos métodos)

Casi todas las instancias de objetos se almacenan en el montón. El primer paso antes de la recolección de basura en el montón es determinar qué objetos deben reciclarse (es decir, objetos que están muertos y ya no se pueden usar de ninguna manera).

Hay dos formas de juzgar.

1. Método de recuento de referencias

Agregue un contador de referencia al objeto. Siempre que haya una referencia a él, el valor del contador se incrementa en 1; cuando la referencia deja de ser válida, el contador se reduce en 1; un objeto cuyo contador es 0 en cualquier momento ya no se puede usar .

Podemos ver que el método de recuento de referencias es simple en principio y eficiente en el juicio, pero en el campo de Java, al menos en las principales máquinas virtuales de Java, este método no se usa para administrar la memoria.

El motivo principal puede ser: En el caso de referencias circulares entre dos objetos, el contador nunca será 0 en este momento, lo que imposibilita su reciclaje.

public class Test {
    
    

    public Object instance = null;

    public static void main(String[] args) {
    
    
        Test a = new Test();
        Test b = new Test();
        a.instance = b;
        b.instance = a;
        a = null;
        b = null;
        doSomething();
    }
}

En el código anterior, las instancias de objeto a las que hacen referencia ayb contienen las referencias de objeto de cada una, por lo que cuando eliminamos las referencias a los objetos a y b, todavía hay referencias entre los dos objetos, lo que da como resultado dos El objeto de prueba no se puede reciclar .

2. Algoritmo de análisis de accesibilidad

La idea básica de este algoritmo es utilizar una serie de objetos llamados "GC Roots" como punto de partida. Desde estos nodos, busque hacia abajo. La ruta que atraviesan los nodos se llama cadena de referencia. Cuando un objeto está conectado al GC Roots sin ninguna cadena de referencia Si es así, prueba que el objeto es inutilizable.

Como se muestra en la figura siguiente, los objetos objeto 5, objeto 6 y objeto 7, aunque están relacionados entre sí, no son accesibles a GC Roots, por lo que se considerarán objetos reciclables.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/hello_cmy/article/details/105874385
Recomendado
Clasificación