Análisis de código fuente esencial de referencia y cola de referencia
La lista de estados de cada Referencia es Activa, Pendiente, En cola, Inactiva (este artículo también se basará en el análisis del código fuente de estos cuatro estados)
El identificador principal entre estados :
Identificado por la cola de variables miembro y el siguiente de Referencia (similar al siguiente en una lista enlazada individualmente)
A través de estas restricciones, el GC solo necesita detectar el siguiente campo para saber si es necesario utilizarlo.
Con estas restricciones, el GC solo necesita detectar el siguiente campo para saber si la referencia requiere un tratamiento especial.
¿Qué tratamiento especial?
Cuando la actividad de estado envía cambios (el método get de PhantomReference se anula y devuelve un valor nulo, lo que puede ser la razón por la que no lo anula), el GC anulará activamente las referencias en las referencias débiles y ignórelo. Las referencias en PhantomReferences y las referencias en el siguiente campo no se anularán. (El método get de PhantomReference devuelve un valor nulo después de ser anulado, tal vez por eso no se invalida) y asigna este valor a siguiente, pendiente, etc. (No me pregunten por qué, pero ya he medido el resultado (No me pregunten por qué, resultados de medición reales...)
Descripción:
Las referencias activas se tratarán especialmente cuando el GC se dé cuenta de que la accesibilidad del objeto ha cambiado. , cambiará el estado de referencia, dependiendo de si la cola está registrada
Características:
Función:
Análisis de código fuente:
Descripción:
Pendiente: las referencias en la lista de referencias están en este estado
Están esperando ser procesadas por el hilo interno ReferenceHandler (llamando al método ReferenceQueue.enqueue)
¡Las instancias no registradas no entrarán en este estado!
Función:
Análisis del código fuente:
3. Parece entender el significado de ReferenceQueue.ENQUEUED
p>Descripción:
Una referencia está en este estado después de llamar al método ReferenceQueue.enqueued
Las instancias que no están en cola no entrarán en este estado <. /p>
Características:
Análisis del código fuente:
Se puede ver que la estructura general es una pila de primero en entrar, primero en salir. stack head r.next apunta a la variable miembro head, si head está vacío, apunta a sí mismo (para encontrar elementos en la pila más adelante)
Descripción:
El estado final, el objeto de referencia está en este estado y este estado no cambiará
Dos formas de alcanzar este estado:
1. referenceQueue llama a veryPoll,
2. No registrar referenceQueue cuando cambie el estado de la referencia
Función:
Análisis de código fuente:
Referencia:
. /blog/2015/09/27/java-weakhashmap/#E5BCB1E5BC95E794A8EFBC88weak-referenceEF .BC89