Analizando el objetivo de la muerte JVM [dos]

En él se resumen las diferentes partes del área de memoria de ejecución de Java en el artículo, que el contador de programa, la pila de la máquina virtual, método nativo apila el ciclo mismas tres regiones y la vida hilo, con el método de la pila de ejecución marco de pila de la máquina virtual para realizar pila respectiva y las operaciones del estallido, la cantidad de memoria en cada marco de pila asignado cuando la estructura de clases sustancialmente finalizado ha sido conocido. Por lo tanto, la asignación de memoria y GC estas áreas están equipadas con certeza, con el extremo del método o hilos, la memoria se recupera de forma natural. El área del montón y el método no es lo mismo, la clase de implementación de interfaz necesita más que una memoria no puede ser la misma, un método de múltiples ramas necesita memoria puede no ser la misma, con el fin de determinar la asignación de memoria es sólo una parte de este programa se está ejecutando, la recolección de basura se teme que esta área de memoria. Debido a que los objetos se almacenan en la pila, para determinar qué objetos se pueden recuperar durante GC.
Aquí Insertar imagen Descripción

En primer lugar, un punto de vista claro: un objeto que no es una muerte no vida. Cuando suficiente espacio, algunos objetos pueden ser retenidos, cuando la falta de espacio, algunos de los objetos será tratada como la recogida de basura.

Analizando el estado del objeto 1. El algoritmo de la muerte

algoritmo contador 1.1 referencia

Dispensar un objeto en la memoria de cabecera del objeto almacenar el número de veces que un objeto se hace referencia, siempre que el objeto que se hace referencia 1 el contrario, cada vez que una referencia no objetos recuperables a -1, 0 cuando se considera .

Ventajas : sencilla, de alto rendimiento.
Desventajas : Es importanteNo resuelve el problema de las referencias circulares.
Aquí Insertar imagen Descripción

algoritmo de análisis de 1,2 alcanzabilidad

java (incluyendo la corriente principal en el lenguaje) es el uso de algoritmo de análisis de accesibilidad para determinar el estado del objeto de la vida y la muerte.

El algoritmo es una serie de "Roots GC" objeto como punto de partida, una búsqueda hacia abajo desde estos objetos, camino a través de la "cadena de referencias", si un objeto no está conectado a cualquier cadena Roots GC de referencia, entonces el objeto se va a recuperar .
Aquí Insertar imagen Descripción
Roots GC se pueden utilizar como objetivo cuatro siguientes:

  1. pila VM (variables locales del marco de pila tabla) objetos referenciados
  2. montones de métodos nativos de objetos referenciados por el Método Nativo
  3. El método de la región objeto de referencia constante
  4. Método estático objeto de clase de la propiedad referenciada por regiones

2. Objeto de la vida y la muerte y las relaciones que se hace referencia

Ya sea algoritmo contador de alcanzabilidad análisis o algoritmos de referencias y las referencias a objetos relacionados, por lo que el objeto de referencia determina el tema de la vida y la muerte.
java referencia de objeto en cuatro categorías: fuerte de referencia 1, la referencia 2 suave, referencias débiles 3, 4. Las referencias virtuales citadas orden de intensidad decreciente.

1. Un fuerte referencia: Object obj = new Object () ; los más comunes en el código, siempre y cuando la referencia es todavía fuerte, el recolector de basura no se recuperará el objeto referenciado, se recomienda el uso de objetos completo configurar manualmente a nulo, obj = null Evitar pérdidas de memoria.

2. referencias blandas: JVM antes de la OOM, tratará de recuperar el objeto de referencia que apunta suave.

3. referencias débiles: el software JVM recuperados por que apunta al objeto ocurre GC.

4. referencia imaginaria: No se puede obtener a través de la instancia de objeto de referencia virtual, establecer un papel único de las referencias a objetos virtuales: recibir una notificación cuando el sistema de referencia de objeto a ser basura recogida.

3. marcado para la muerte y la salvación

Después de un cierto análisis del objeto de alcanzabilidad, la verdadera marca de la muerte a pasar por el proceso dos veces.

Si el objeto no llega a la cadena Roots GC referencia está conectado, será la primera marca y, a continuación cribado con dos condiciones:
1. El objeto de volver a escribir el objeto Finalizar ();
Finalizar 2. sujeto () no es realizado (finalizar el objeto () sólo una vez).

No cumple con la meta, el segundo criterio de filtro está muerto, se añadirán cumplir con los criterios del filtro a una cola de ese objeto después, un hilo de baja prioridad creado por una ejecución de la máquina virtual.

Si el finalize () re-establecido y asociado con cualquier objeto en una cadena de referencias, este objeto no está muerto.

public class FinalizeTest {
    private static FinalizeTest finalizeTest = null;

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("finalize方法执行了");
        FinalizeTest.finalizeTest = this;
    }

    public static void main(String[] args) throws InterruptedException {
        finalizeTest = new FinalizeTest();

        //对象第一次成功拯救自己
        finalizeTest = null;
        System.gc();
        //因为finalize方法优先级很低,所以暂停1秒等待一下
        Thread.sleep(1000);
        if(finalizeTest!=null){
            System.out.println("对象被拯救了");
        }else{
            System.out.println("对象死亡了");
        }

        //这段与上面完全相同,但是却拯救失败了
        finalizeTest = null;
        System.gc();
        Thread.sleep(1000);
        if(finalizeTest!=null){
            System.out.println("对象被拯救了");
        }else{
            System.out.println("对象死亡了");
        }
    }
}

resultados de la ejecución son las siguientes:
Aquí Insertar imagen Descripción

No se recomienda finalize () de rescate de las siguientes razones:
1. una sola vez
2. Ejecutar costosa
3. La llamada no puede garantizar el orden de cada objeto

Publicado 11 artículos originales · ganado elogios 0 · Vistas 615

Supongo que te gusta

Origin blog.csdn.net/fei1234456/article/details/104733165
Recomendado
Clasificación