Oilpan: el recolector de basura para C++ en Chromium

Fuentes: Oilpan: The C++ Garbage Collector for Chromium

Oilpan es un recolector de basura escrito en C++ diseñado para gestionar la memoria en el motor de renderizado Blink de Chromium, donde gran parte del código no es JavaScript. A diferencia de los recolectores tradicionales, Oilpan utiliza un enfoque de trazado cruzado (cross-component tracing) que trata el grafo de objetos entrelazado entre C++ y JavaScript como un único montón de memoria, permitiendo una gestión más eficiente de los recursos compartidos.

El sistema se basa en el patrón Mark-Sweep, dividiendo el proceso en dos fases: marcado y barrido. En la fase de marcado, Oilpan escanea el grafo de objetos para identificar los vivientes, utilizando un patrón de visitante que aprovecha el tipado estático de C++ para describir las referencias. Esto permite un rastreo preciso sin penalizaciones de rendimiento en el acceso a la pila, ya que el costo se traslada a la fase de barrido mediante un escaneo conservador de la pila.

La implementación en Blink soporta características avanzadas como herencia múltiple, contenedores secuenciales y asociativos, y referencias débiles. Un aspecto crítico es la gestión de destructores: Oilpan impone restricciones estrictas para evitar que los finalizadores accedan a objetos en la pila durante su destrucción, utilizando un plugin de Clang para verificar esto estáticamente. Además, ofrece callbacks de pre-finalización para casos complejos, aunque con un sobrecoste de rendimiento. Actualmente, Oilpan está integrado en Blink, pero el equipo de Chromium está migrando su lógica hacia V8 mediante una librería de recolección de basura, con el objetivo de hacer el recolección de memoria en C++ accesible para todos los integradores de V8.