Hay cuatro algoritmos comunes de recolección de basura en JVM:
Algoritmo de limpieza de marcas (Mark-Sweep);
Algoritmo de copia (copia);
Marca compacto;
Colección generacional;
Presentemos uno por uno:
1. Algoritmo de limpieza de marca (Mark-Sweep)
Este es el algoritmo de recolección de basura más básico. El algoritmo se divide en dos etapas: "Marcado" y "Limpieza": Primero, todos los objetos que deben reciclar están marcados, y todos los objetos marcados se reciclan uniformemente después de que se complete la marca. Sus principales desventajas son dos: uno es el problema de eficiencia, y la eficiencia de la marca y la limpieza no es alta; El otro es el problema del espacio, después de que se borra el marcado, se generará una gran cantidad de fragmentos de memoria discontinuos. Demasiados fragmentos de espacio pueden causar un espacio continuo grande insuficiente al asignar objetos grandes, y otra acción de recolección de basura debe activarse por adelantado.
Diagrama de algoritmo de marcado
2. Algoritmo de copia (copia)
Para resolver el problema de eficiencia, con el algoritmo de "copia", divide la memoria disponible en dos bloques del mismo tamaño. Usa solo una pieza a la vez. Cuando se use una pieza de espacio, copie el objeto aún ascendente a otra pieza y luego limpie el espacio de memoria recién utilizado a la vez. Esto permite reciclar una de las piezas cada vez, de modo que no se requiere que la fragmentación de la memoria y otras situaciones complejas se consideren al asignar la memoria. Implementación simple y operación eficiente. Pero el costo de este algoritmo es reducir la memoria a la mitad del original, lo cual es demasiado caro. De hecho, el 98% de los objetos en la nueva generación viven y mueren, por lo que no hay necesidad de dividir la memoria en una relación 1: 1, pero divide la memoria en un espacio de Edén más grande y dos espacios de supervivencia más pequeños, cada vez que usa el espacio Eden y uno de los espacios de sobrevivientes. Cuando se recicle, copie los objetos aún ascendentes en Edén y sobreviviente a otro suiviror a la vez, y finalmente limpie el espacio del Edén y el sobreviviente recién utilizado.
Copiar diagrama de algoritmo
3. Mark-compact
Cuando la tasa de supervivencia del objeto es alta, el algoritmo de replicación y recolección debe realizar más operaciones de replicación, y la eficiencia se reducirá. Más importante aún, si no desea desperdiciar el 50% del espacio, debe tener espacio adicional para asignar garantías para lidiar con la situación extrema en la que todos los objetos en la memoria de media zona están 100% vivos, por lo que este algoritmo no puede usarse directamente en los ancianos.
Por lo tanto, las personas propusieron otro algoritmo de "compacto de marca". Dado que los objetos en los ancianos tienen un largo ciclo de supervivencia, algunas personas propusieron el algoritmo de "marca compacto". El proceso de marcado es el mismo que la "limpieza de marcas", pero al limpiar los objetos muertos, los objetos sobrevivientes se ordenarán, lo que puede reducir el espacio fragmentado.
Diagrama de algoritmo de marca de organización
4. Colección generacional
Actualmente, la recolección de basura para máquinas virtuales comerciales adopta el algoritmo de "colección generacional". No hay una nueva idea en este algoritmo, pero la memoria se divide en varias piezas de acuerdo con los diferentes ciclos de supervivencia del objeto. En general, los montones de Java se dividen en la nueva generación y la antigua generación, de modo que el algoritmo de recolección más apropiado se puede usar de acuerdo con las características de cada generación. En la nueva generación, cada vez que se recolecta una recolección de basura, una gran cantidad de objetos se encuentran muertos y solo un pequeño número sobreviven. Luego use el algoritmo de copia y la colección se puede completar con una pequeña cantidad de costo de copia. En los ancianos, debido a que la tasa de supervivencia de los objetos es alta y el ciclo es largo, el algoritmo "Mark-Tidy" o "Mark-Clare" se usa para reciclarlo.
La introducción anterior a los algoritmos comunes de recolección de basura en JVM es todo el contenido que comparto con ustedes. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.