¿Cómo?
-Algoritmos clásicos
+Algoritmos Clásicos
~~~~~~~~~~~~~~~~~~~
* Conteo de referencias
* **Marcado y barrido**
.. dummy: para que ande bien el raw de arriba
-Estado del arte
+Estado del Arte
~~~~~~~~~~~~~~~
* Medio siglo de investigación y desarrollo (3000+ publicaciones)
* Objetivo
* Análisis estático
-El lenguaje de programación D
+El Lenguaje de Programación D
--------------------------------------------------
-Características generales
+Características Generales
~~~~~~~~~~~~~~~~~~~~~~~~~
* Sintaxis tipo C/C++
* Compilado
-Recolector de basura de D
+Recolector de Basura de D
==============================================================================
-Implementación actual
+Implementación Actual
--------------------------------------------------
-Organización del heap
+Organización del Heap
~~~~~~~~~~~~~~~~~~~~~
*Heap* → *Pools* → Páginas → Bloques + Listas de libres
* Muy propenso a extender el tiempo de *stop-the-world* en la práctica
-Lo bueno, lo malo y lo feo
+Lo Bueno, lo Malo y lo Feo
--------------------------------------------------
-Lo bueno
+Lo Bueno
~~~~~~~~
* Anda :)
* Organización del *heap* (*two-level allocation*)
(bueno != perfecto)
-Lo malo y lo feo
+Lo Malo y lo Feo
~~~~~~~~~~~~~~~~
Lo malo
* Comienza con un solo hilo (el que llamó a ``fork(2)``)
* Muy eficiente
-Algoritmo principal
+Algoritmo Principal
~~~~~~~~~~~~~~~~~~~
* Basado en el trabajo de Gustavo Rodriguez-Rivera y Vince Russo (*Non-intrusive
Cloning Garbage Collector with Stock Operating System Support*)
→ Tiempo de pausa en la práctica ~= tiempo total de recolección
-Eager allocation
+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
↓ Tiempo de pausa real
-Early collection
+Early Collection
~~~~~~~~~~~~~~~~
* Dispara una recolección *preventiva* antes de que se agote la memoria
* Permite al programa (**todos** sus hilos) seguir trabajando mientras la
↓ Tiempo de pausa real (no garantizado)
-Otras mejoras
+Otras Mejoras
--------------------------------------------------
Precisión
* Utiliza la información para escanear solo palabras que son punteros (con
seguridad o potencialmente)
-Optimizaciones y otras mejoras menores
+Optimizaciones y Otras Mejoras Menores
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Mejora del factor de ocupación del *heap*
* Caché de consultas críticas para acelerar cuellos de botella
* Mejoras propuestas → Efectivas
* Resultados → Positivos: Esperados + Inesperados
-Problemas, limitaciones y Puntos Pendientes
+Problemas, Limitaciones y Puntos Pendientes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Predicción de *early collection*
* Explosión de uso de memoria con *eager allocation*
~~~
¡Gracias!
+
.. vim: set et sw=4 sts=4 spell spelllang=es :