Recolección de Basura - Recolección Generacional

Recolección de Basura Generacional

En "Algoritmos de recolección de basura", se introducen tres algoritmos de recolección de basura, pero la máquina virtual JVM real no usa solo un algoritmo determinado. Combina los tres algoritmos anteriores para trabajar juntos. La implementación específica se llama en la máquina virtual. Es un mecanismo de recolección de basura generacional, que divide toda el área de nuestra memoria de almacenamiento dinámico en dos partes, una se llama nueva generación y la otra se llama generación anterior. La nueva generación se divide además en el Jardín del Edén, el Área de supervivencia desde y el Área de supervivencia hasta.

¿Por qué tal división regional? La razón principal es que algunos objetos en Java deben usarse durante mucho tiempo. Los objetos que se han usado durante mucho tiempo se colocan en la generación anterior, y los objetos que se pueden descartar después del uso se pueden colocar en la nueva generación. Diferentes características del ciclo de vida llevan a cabo diferentes estrategias de recolección de basura. La recolección de basura en la generación anterior ocurre solo una vez durante mucho tiempo, mientras que la recolección de basura en la nueva generación ocurre con más frecuencia. La nueva generación se ocupa de objetos que están a punto de morir, mientras que la generación anterior se ocupa de objetos que son más valiosos y existen para mucho tiempo. De esta manera, el uso de diferentes algoritmos para diferentes áreas puede administrar la recolección de basura de manera más efectiva.

Cuando creamos un nuevo objeto, el nuevo objeto usará un espacio en el Jardín del Edén por defecto, y luego se pueden crear y colocar muchos objetos en el Jardín del Edén, y el espacio libre en el Jardín del Edén disminuirá gradualmente. Cuando se crea un objeto y se encuentra en el Jardín del Edén. Cuando no hay suficiente espacio, se activará una recolección de basura, que se encuentra en la nueva generación de recolección de basura (Menor GC). Después de que se activa Minor GC, el algoritmo de análisis de accesibilidad mencionado anteriormente se utilizará para buscar a lo largo de la cadena de referencia de GC Root para ver si los objetos en el Jardín del Edén son útiles o basura y marcarlos. Después de que la marca sea exitosa, el algoritmo de copia se usará para copiar los objetos supervivientes al área superviviente A. Después de copiar al área superviviente A, la vida de los objetos supervivientes aumentará en 1, y los objetos restantes en el Jardín de Eden se puede reciclar por completo, y luego dejar que el área de supervivencia From y el área de supervivencia se intercambien, hasta ahora se completó la primera recolección de basura, y en este momento hay suficiente espacio en Eden, y puede continuar asignando objetos a Edén.

Después de un período de tiempo, el espacio en Eden se vuelve a llenar y se activa la segunda recolección de basura. Además de encontrar los objetos sobrevivientes en Eden, esta recolección de basura también necesita averiguar si hay alguna necesidad de continuar sobreviviendo en Eden. el área superviviente Objeto. Luego coloque los objetos sobrevivientes en el Jardín del Edén en el área de supervivencia TO y aumente la vida útil en 1. Además, coloque los objetos sobrevivientes en el área de supervivencia From en el área de supervivencia To y agregue 1 a la vida anterior. Luego regresa para liberar a Eden y limpia la basura del área de sobrevivientes. Luego intercambie De y A. De esta manera, hay suficiente espacio en el Jardín del Edén, y se completa la segunda recolección de basura.

Los objetos en el área de supervivencia no permanecerán en el área de supervivencia para siempre. Cuando su vida útil supera un umbral, por ejemplo, el umbral predeterminado es 15, es decir, siempre que el objeto siga vivo después de 15 recolecciones de basura, significa que el valor del objeto es relativamente alto, se usa a menudo, por lo que no es necesario mantenerlo en el área de sobrevivientes, ya que el objeto no será reclamado por la recolección de basura en el futuro. En este momento, el objeto será promovido a la generación anterior, porque la frecuencia de recolección de basura en la generación anterior es relativamente baja, no se reciclará fácilmente. Este es el proceso de recolección de elementos no utilizados de Minor GC.

Durante el proceso de reciclaje continuo, puede parecer que el espacio de memoria en la generación anterior está lleno y el espacio en la nueva generación también está lleno. En este momento, Minor GC no puede resolver el problema. En este momento, se requiere Full GC Por lo general, este reciclaje de basura solo se activa cuando no hay suficiente memoria en el espacio. El significado de Full GC es hacer una limpieza general cuando el espacio en la generación anterior es insuficiente. Desde la nueva generación hasta la generación anterior, se limpia todo el montón.

Resumir

  • Los objetos se asignan primero en el área de Eden.
  • Espacio insuficiente en la nueva generación, se activa Minor GC, los objetos supervivientes de Eden y From se copian a TO usando Copy, la edad de los objetos supervivientes aumenta en 1 y se intercambia from to
  • Minor GC causará Stop the world (al ejecutar el algoritmo de recolección de basura, todos los demás subprocesos de la aplicación Java se suspenden (excepto el asistente de recolección de basura)), la razón para suspender los subprocesos de otros usuarios es porque en la basura El proceso de el reciclaje implica la copia del objeto, es decir, el cambio de la dirección del objeto. En este caso, si varios subprocesos se ejecutan al mismo tiempo, causará confusión. El objeto se ha movido y otros subprocesos acceden a este objeto nuevamente. De acuerdo con el original, la dirección no puede encontrar este objeto, por lo que se activará STW. Suspenda otros subprocesos de usuario y espere a que se complete la recolección de elementos no utilizados antes de que el subproceso de usuario pueda continuar.
  • Cuando la vida del objeto exceda el umbral, se promoverá a la generación anterior y la vida máxima es de 15 veces (4 bits).
  • Cuando no hay suficiente espacio en la generación anterior, primero intentará activar Minor GC, y si todavía no hay suficiente espacio en el futuro, activará Full GC. FULL GC también causará STW, pero el tiempo de STW correspondiente a la generación anterior es más largo.

Supongo que te gusta

Origin blog.csdn.net/qq_35363507/article/details/104930159
Recomendado
Clasificación