algoritmos de GC - El conteo de referencias

contorno

recuento de referencias que demonios es? Como su nombre indica, es una referencia al objeto de contar el número de veces que ha sido citado por la grabación de cada objeto para determinar si el objeto puede ser reciclado.

realización

En primer lugar, el número de destino de referencias para gestionar, cuando va a actualizarlo?

  1. Crear un objeto: crear un nuevo objeto (número de referencia 1 para este nuevo objeto)
  2. Actualización de puntero: un puntero a un punto objeto A al punto B de nuevo los objetos (número de referencias a objetos a A -1, B objeto de referencia número 1)

Este no es el código, una idea breve sobre la línea. (Mi hermano dijo, mirando a la extenuante código)

Premisa : Tenemos una lista global de direcciones libres: FREE_HEAD

Eso crear objetos

  1. Mirando la memoria de la FREE_HEAD
  2. Si lo encuentra, el contador de objetos se establece en 1, el regreso
  3. Si no lo encuentra, expansión de memoria, devuelve 1

operación de actualización del puntero

  1. recuento de la nueva referencia de objeto 1
  2. El viejo contador de referencias de objetos -1 -1 si el número de referencia es 0, a continuación, añadir el objeto y todos los objetos secundarios a FREE_HEADla lista.

Hablando lograr sencilla, después de todo, realmente no me voy a lograr, simplemente pienso.

análisis

En la última 标记清除算法de GC se ejecuta cada vez fuera de la memoria, conducirá inevitablemente a la suspensión del programa desde hace mucho tiempo, pero 引用计数se logró al mismo tiempo, cada puntero, se recuperaron inmediatamente cuando una nueva basura. Esto refleja fuera de sus varias ventajas:

  1. La pausa máximo corto.
  2. La basura puede producir una recuperación inmediata

Por supuesto, sólo decir que no dicen las ventajas y desventajas se tira de ternera. En primer lugar, 引用计数la ventaja será su desventaja, con frecuencia cuenta cálculo, la velocidad será arrastrado por el programa. Cada objeto y debe abrir un espacio para almacenar un número de referencia. Por supuesto a menudo llega un problema de referencia circular. y así en él.

  1. Las actualizaciones frecuentes del programa de velocidad de arrastre contador de referencias
  2. Cada objeto tiene que abrir un espacio adicional para su cuenta de referencia
  3. objeto de referencia circular no puede ser reciclado (A referencia es a B, las referencias B A. Pero ellos no son referenciados por otros objetos, lo que resulta en una referencia Siempre 1, no puede ser reciclado)

Por supuesto, para el problema, siempre hay una gran manera de resolver el ejemplo anterior:

conteo de retardo : Para actualizaciones frecuentes problemas de contador eleva sobre el significado no es una referencia al número de actualización en tiempo real, el número de referencia para el registro para ser procesado en una lista enlazada 0 cuando la necesidad de una nueva reunificación de memoria proceso. Sin embargo, esto aumentará el tiempo de pausa antes que ellos.

Pegajosa de referencia de conteo : conteo de referencia por el número de referencias para ahorrar espacio adicional, sino que debe haber un valor máximo, por ejemplo, un byte, el número de referencia no menos de 256 en la mente de este método de tratamiento está fuera de rango. sencillo, no hacer nada, no se recuperan, después de todo, han citado tantas veces, el objeto será sin duda muy importante que estos objetos no nunca se recuperaron? Sí, espera hasta que no haya memoria, y el uso de 标记清除算法todos los objetos de nuevo .

Por supuesto, hay muchos métodos para la evolución del recuento de referencias, algunas de las cuales son muy interesantes, algunos que no entienden.


La recolección de basura en su conjunto se divide en dos escuelas de pensamiento (lo sé):

  1. recuento de referencias: es decir, por encima de
  2. Accesibilidad: que es 标记清除el tipo de determinar si un objeto puede ser alcanzado.

引用计数La mayor ventaja es que no debería tener que hacer una pausa en el programa que se recupere, con la recuperación, pero con el uso de inferior también es obvio: la necesidad de espacio en el mostrador extra y unas referencias circulares.

Personalmente prefiero 引用计数el alto en tiempo real, y no requiere mucho espacio adicional sólo tiene que evitar deliberadamente al escribir código en una referencia circular, u otros métodos para burlar él? Ni siquiera tratar con todos deliberada, si sólo unas pocas palabras ( Si hay muchos, todavía es otro algoritmo).

Supongo que te gusta

Origin www.cnblogs.com/hujingnb/p/12638443.html
Recomendado
Clasificación