Cómo funciona el sistema de fugas

1. Concepto

1.1 El significado y función de ReferenceQueue
Generalmente traducimos ReferenceQueue como una cola de referencia, en otras palabras, es una cola que almacena referencias y lo que se guarda es el objeto Referencia. Su función es que cuando el GC recicla el objeto al que hace referencia el objeto de referencia, el objeto de referencia se agregará al final de la cola en la cola de referencia (ReferenceQueue).

1.2 ¿Qué pasa si se determina que el objeto al que hace referencia Reference ha sido reciclado?
1.2.1 Si la Referencia extraída de la lista de referencias ReferenceQueue no está vacía, significa que el objeto ha sido reciclado.
1.2.2 Si está vacío significa que se ha filtrado.

2. ¿Cómo detecta fugas?

  1. Al instalar, se registrará el monitor ActivityLifecycleCallbacks para monitorear la ejecución de onDestry (equivalente al primer GC).
  2. Cree un objeto reWacher. Se mantendrán dos listas en el objeto, watchReferences (lista de observación) y retainedReferences (lista de sospechosos).
  3. Cuando se ejecuta el método de vigilancia (llamado cuando se ejecuta onDestry),
    3.1. La lista de vigilancia y la lista de sospechas se borrarán primero,
    3.2. Luego se crea una WeakReference y se genera una clave única para asociar la WeakReference con la cola de referencia.
    3.3 Agregue la WeakReference actual a la lista de vigilancia.
    4. Después de esperar 5 segundos, si el objeto se recicla, habrá datos en la cola de referencia, luego la WeakReference en la cola de referencia se sacará y se comparará con la WeakReference en la lista de observación (a través de la clave generada previamente). Si son consistentes, la observación será eliminada de la lista. Si hay datos en la lista de vigilancia que indican que puede haber una fuga, mueva WeakReference de la lista de vigilancia a la lista de sospechosos.
    5. Detecte pérdidas de memoria en el subproceso de trabajo.
    Si se agrega WeakReference a la lista de sospechas, GC se ejecutará activamente nuevamente. Si se recicla, finalizará. De lo contrario, se volcará la memoria del montón.
    Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/L779442863/article/details/125677663
Recomendado
Clasificación