Recolector de basura
Herramienta educativa interactiva con visualización. Mark-sweep / generational GC on a toy heap: roots, marks, and frees.
Acerca de esta herramienta
Seguir una recolección
Elija una recolección completa o solo de jóvenes, un montón y un objeto raíz o ninguna raíz. Preparar montón crea la cronología inmutable completa y muestra el paso 0. La raíz seleccionada se conserva. En el preajuste aleatorio, elija 8–32 objetos y una semilla entera de 0 a 4294967295. El recuento y la semilla no se usan en el montón fijo de dos ciclos.
Utilice el campo de paso exacto, el deslizador de cronología, Atrás, Siguiente, Inicio o Fin para inspeccionar las mismas instantáneas. La reproducción avanza a 1, 3 o 10 pasos por segundo real y se detiene al final; reproducir desde el final reinicia en el paso 0. La navegación manual y el cambio de velocidad pausan la reproducción. Una vista oculta congela su paso y solo reanuda si estaba reproduciendo.
Recolección completa
Las raíces inician una lista de trabajo FIFO. Cada paso de marcado visita un objeto, lo marca y encola destinos elegibles no visitados. Cuando la lista de trabajo está vacía, el barrido examina cada objeto, conserva los marcados y libera los no marcados. Un ciclo de referencias inalcanzable se recolecta por tanto aunque sus miembros se referencien entre sí.
Recolección conservadora solo de jóvenes
Solo los objetos jóvenes pertenecen al conjunto de recolección. Las raíces jóvenes y todas las referencias viejo→joven suministran puntos de entrada. Estas aristas recordadas se muestran como referencias dirigidas discontinuas y se listan de forma explícita. El recorrido permanece en los objetos jóvenes. Los objetos viejos se retienen siempre, incluidos los viejos globalmente inalcanzables; sus destinos jóvenes pueden por tanto sobrevivir también de forma conservadora.
El barrido libera solo objetos jóvenes no marcados. Un paso de promoción aparte pasa a viejo todo objeto joven superviviente. Esta regla deliberadamente simplificada de una sola supervivencia no es una política de envejecimiento JVM o CLR. La lista exacta de aristas viejo→joven no es aquí una aproximación de card-table ni una reproducción de G1.
Ejemplos de montón
El montón fijo tiene ocho objetos y las referencias 0→1, 1→2, 2→1, 3→4, 4→5 y 5→4. Los objetos 6 y 7 no tienen referencias salientes. Los objetos 0, 3 y 7 son viejos; el resto son jóvenes. Una recolección completa enraizada en 0 conserva solo 0, 1 y 2. Sin raíces libera todo. Una recolección solo de jóvenes enraizada en 0, o sin raíces, retiene 0, 1, 2, 3, 4, 5 y 7 y libera 6: las aristas 0→1 y 3→4 protegen ambos ciclos jóvenes.
El montón aleatorio usa el generador determinista mulberry32. Cada objeto tiene hasta dos referencias destino aleatorias distintas, incluidas posibles autorreferencias. Los ID divisibles por 3 son viejos, los demás jóvenes. La misma semilla y los mismos ajustes reproducen el mismo montón y la misma cronología.
Leer el grafo
Los círculos con Y denotan objetos jóvenes; los cuadrados con O denotan objetos viejos. R identifica una raíz, un anillo discontinuo significa en cola, y un anillo exterior sólido identifica el objeto activo. Una marca denota marcado; un objeto tachado está liberado. Las referencias salientes activas se enfatizan. Los objetos liberados y las referencias históricas atenuadas permanecen en su sitio para explicar la recolección; no se muestra compactación. La tabla registra, en cada instantánea, la generación real, los ID de referencia almacenados y el estado. La lista de trabajo se muestra en orden FIFO.
Alcance y coste
Este es un pequeño modelo didáctico stop-the-world. No hay asignaciones durante una ejecución, ni finalizadores, referencias débiles, compactación ni barreras de escritura concurrentes. El algoritmo de recolección toma un trabajo O(V + E) para V objetos y E referencias. Conservar una instantánea completa tras cada paso usa un espacio O(V² + VE) en esta cronología didáctica. Eso no es una afirmación sobre el uso de memoria o el rendimiento de un recolector de basura real.
Fuentes
Microsoft: garbage collection fundamentals y Oracle: G1 and remembered sets.
Las entradas, el montón preparado y la posición de la cronología se guardan localmente. Al volver o cambiar de idioma se restaura el paso en pausa, incluidas las entradas inválidas. Borrar el resultado elimina el montón preparado y conserva las entradas.