5 min / 7.5 min
-Recolector de Basura de D
-~~~~~~~~~~~~~~~~~~~~~~~~~
+Recolector Actual de D
+~~~~~~~~~~~~~~~~~~~~~~
* Marcado y barrido
* Marcado iterativo
3 min / 33 min
-Lo Bueno
-~~~~~~~~
+Recolector Actual - Lo Bueno
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Anda :)
* Organización del *heap* (< fragmentación)
* Marcado iterativo (!\ *overflow*)
5 min / 38 min
-Lo Malo y lo Feo
-~~~~~~~~~~~~~~~~
+Recolector Actual - Lo Malo y lo Feo
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lo malo
* ↓ Configurabilidad (*no silver bullet*)
* Algoritmo basado en el trabajo de Gustavo Rodriguez-Rivera y Vince Russo
(*Non-intrusive Cloning Garbage Collector with Stock Operating System
Support*)
-* Minimiza tiempo de pausa realizando fase de marcado **concurrente** vía
+* Minimiza tiempo de pausa realizando fase de **marcado concurrente** vía
``fork(2)``
* Proceso padre sigue corriendo el programa
* Proceso hijo realiza fase de marcado
2.5 min / 44 min
-Problemas
-~~~~~~~~~
+Concurrencia - Problemas
+~~~~~~~~~~~~~~~~~~~~~~~~
* Hilo que disparó la recolección bloqueado hasta fin de recolección completa
(marcado concurrente inclusive)
* Otros hilos potencialmente bloqueados durante toda la recolección también
2.5 min / 46.5 min
-Eager Allocation
-~~~~~~~~~~~~~~~~
+Concurrencia - Eager Allocation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Crea un nuevo *pool* de memoria antes de lanzar el marcado concurrente
* Devuelve memoria del nuevo *pool* al programa mientras termina el marcado
concurrente
6.5 min / 53 min
-Early Collection
-~~~~~~~~~~~~~~~~
+Concurrencia - Early Collection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Dispara una recolección *preventiva* antes de que se agote la memoria
* Permite al programa (**todos** sus hilos) seguir trabajando mientras la
recolección *preventiva* está en progreso