1. Introducción a los algoritmos de citas (suplementario)

El algoritmo registrará el número de veces que se hace referencia al objeto en cada objeto. Mientras cualquier objeto haga referencia al segundo objeto, el contador de este objeto será +1, y cuando se cancele la referencia a este objeto, el contador será -1. En cualquier momento, si el contador del objeto es 0, entonces el objeto

public static void invoke() {
    User a = new User ();
}

public static void main(String[] args) {
    invoke();
}

La función principal llama al método de invocación. En el método de invocación, se asigna un nuevo objeto Usuario a la variable local a. En este momento, el contador de la instancia del objeto Usuario en la memoria del montón será +1.

Cuando finaliza el método, la variable local se destruirá en consecuencia y el contador del objeto en la memoria del montón será -1.

Problemas existentes

1. Incapaz de manejar referencias circulares.

2. Cada asignación de referencia y cada borrado de referencia de objetos en el montón van acompañados de operaciones de suma y resta, lo que traerá una cierta sobrecarga de rendimiento.

Entonces Java no usa este algoritmo para implementar GC.

Expliquemos la situación de las referencias circulares, como el siguiente código.

class User {
    private Order order;
    public void setOrder(Order order) {
        this.order= order;
    }
}

class Order  {
    private User user ;
    public void setUser(User user) {
        this.user = user;
    }
}

public void method() {
    User user = new User();
    Order order = new Order();
    user.setOrder(user);
    order.setUser(order);
}

El objeto Usuario se refiere al objeto Pedido, y el objeto Pedido se refiere al objeto Usuario.

En el método de método, después de que se ejecutan los dos conjuntos, el método de método finaliza y desaparecen las dos referencias de línea negra en la figura. Se puede ver que los dos objetos quedan para ser referenciados circularmente en la memoria del montón, pero no hay no hay lugar para usarlos en este momento, lo que provoca una pérdida de memoria. Los dos sujetos estaban desordenados en el viento, perdidos.

 Entonces Java no usa este algoritmo para implementar GC.

Supongo que te gusta

Origin blog.csdn.net/lzzyok/article/details/119833432
Recomendado
Clasificación