Conocimiento profundo de la máquina virtual Java (segunda edición): algoritmo de recolección de basura

Tabla de contenido

 

3.3.1 Algoritmo Mark-Clear

3.3.2 Copiar algoritmo

3.3.3 Algoritmo de clasificación y marcado

3.3.4 Algoritmo de recopilación generacional


3.3.1 Algoritmo Mark-Clear

El algoritmo de recolección más básico es el algoritmo "Mark-Sweep". Como su nombre, el algoritmo se divide en dos etapas: "Marcado" y "Barrido": en primer lugar, se marcan todos los objetos que necesitan ser reciclados. Después de la finalización, todos los objetos marcados se recuperan uniformemente. El proceso de marcado se ha introducido en la sección anterior sobre la determinación del marcado de objetos. La razón por la que se dice que es el algoritmo de recolección más básico es que los algoritmos de recolección posteriores se basan en esta idea y mejoran sus deficiencias.
Tiene dos defectos principales : uno es el problema de eficiencia , la eficiencia de los procesos de marcado y limpieza no es alta; el otro es el problema de espacio , una vez que se borra el marcado, se generará una gran cantidad de fragmentos de memoria discontinuos y puede causar demasiada fragmentación Más tarde, cuando es necesario asignar un objeto más grande durante la ejecución del programa, no puede encontrar suficiente memoria contigua y tiene que activar otra recolección de basura por adelantado. El proceso de ejecución del algoritmo mark-clear se muestra en la Figura 3-2.

 

3.3.2 Copiar algoritmo

Para solucionar el problema de la eficiencia, apareció un algoritmo de recolección llamado "Copying", que divide la memoria disponible en dos piezas de igual tamaño según la capacidad, y solo utiliza una pieza a la vez. Cuando este bloque de memoria se agota, los objetos supervivientes se copian en otro bloque y luego el espacio de memoria utilizado se limpia de una vez. De esta manera, la mitad del área se recupera cada vez y no hay necesidad de considerar la fragmentación de la memoria y otras situaciones complejas cuando se asigna la memoria. Siempre que el puntero en la parte superior del montón se mueva y la memoria se asigne en orden, la implementación es simple y la operación es eficiente. Es solo que el costo de este algoritmo es reducir la memoria a la
mitad de la original, lo cual es demasiado alto. El proceso de ejecución del algoritmo de replicación se muestra en la Figura 3-3.

  • Todas las máquinas virtuales comerciales actuales utilizan este algoritmo de recopilación para reciclar la nueva generación. La investigación especial de IBM muestra que el 98% de los objetos de la nueva generación están "vivos y mueren", por lo que no es necesario dividirlos en una proporción de 1: 1. El espacio de memoria, pero la memoria se divide en un espacio de Edén más grande y dos espacios de Superviviente más pequeños, cada vez que uses Edén y uno de los Supervivientes. Al reciclar, copie los objetos supervivientes en Eden y Survivor a otro espacio de Survivor a la vez, y finalmente limpie Eden y el espacio de Survivor que acaba de usar. La proporción predeterminada de Eden a Survivor para la máquina virtual HotSpot es 8: 1, lo que significa que el espacio de memoria disponible en cada nueva generación es el 90% (80% + 10%) de toda la capacidad de la nueva generación, y solo el 10% de la memoria se "desperdiciará" ". Por supuesto, el 98% de los objetos que se pueden recuperar son solo datos en escenarios generales. No tenemos forma de asegurarnos de que no más del 10% de los objetos sobreviven cada vez. Cuando el espacio de Superviviente no es suficiente, debe confiar en otra memoria (aquí se refiere a la generación anterior). Garantía de distribución (Promoción Mango).
  • La garantía de asignación de memoria es como ir al banco a pedir dinero prestado. Si tenemos una buena reputación, podemos pagar a tiempo en el 98% de los casos, por lo que el banco puede asumir que podemos pagar el préstamo a tiempo y en cantidad la próxima vez, solo se necesita una garantía. La gente puede garantizar que si puedo deducir dinero de su cuenta cuando no puedo pagarlo, el banco cree que no hay riesgo. La garantía de asignación de memoria también es la misma: si otra parte del espacio Survivor no tiene suficiente espacio para colocar los objetos supervivientes recolectados en la nueva generación, estos objetos ingresarán directamente a la generación anterior a través del mecanismo de garantía de asignación. El contenido de la garantía de asignación para la nueva generación se explicará en detalle más adelante en este capítulo cuando se expliquen las reglas de ejecución del recolector de basura.

3.3.3 Algoritmo de clasificación y marcado

El algoritmo de recopilación de copias realizará más operaciones de copia cuando la tasa de supervivencia del objeto sea alta y la eficiencia será menor. Más importante aún, si no desea desperdiciar el 50% del espacio, necesita tener espacio adicional para las garantías de asignación para lidiar con la situación extrema en la que todos los objetos en la memoria utilizada están 100% vivos, por lo que generalmente no se usa directamente en la vejez. algoritmo.
De acuerdo con las características de la vejez, alguien propuso otro algoritmo "Mark-Compact". El proceso de marcado sigue siendo el mismo que el algoritmo "Mark-Clear", pero los pasos posteriores no son la limpieza directa de objetos reciclables. En su lugar, todos los objetos supervivientes se mueven a un extremo, y luego la memoria fuera del límite final se limpia directamente El diagrama esquemático del algoritmo de "clasificación de marcado" se muestra en la Figura 3-4.

3.3.4 Algoritmo de recopilación generacional

La recolección de basura actual de las máquinas virtuales comerciales utiliza el algoritmo "Colección Generacional", que no tiene ideas nuevas, pero divide la memoria en varios bloques de acuerdo con el ciclo de vida del objeto. Generalmente, el montón de Java se divide en nueva generación y generación antigua, de modo que se pueda adoptar el algoritmo de recolección más adecuado según las características de cada generación. En la nueva generación, se descubre que una gran cantidad de objetos mueren cada vez que se realiza una recolección de basura, y solo unos pocos sobreviven, luego se selecciona el algoritmo de replicación y la recolección solo se puede completar pagando el costo de replicación de una pequeña cantidad de objetos supervivientes. En la vejez, debido a que el objeto tiene una alta tasa de supervivencia y no hay espacio adicional para su garantía de asignación, es necesario utilizar el algoritmo "mark-clean up" o "mark-clean up" para el reciclaje.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/someby/article/details/103880289
Recomendado
Clasificación