El page on the garbage collector no especifica si D usa un recolector de basura incremental o una versión stop-the-world. Menciona pausando algunas veces, lo que podría ser una pista de un colector de basura de todo el mundo, pero no estoy seguro.¿El lenguaje de programación D usa un recolector de basura incremental?
Si no utiliza un recolector de basura incremental, ¿hay alguna razón particular para esto? Un GC stop-the-world ofrece un momento difícil para las aplicaciones interactivas.
Hola amigo fanático de Haunter (sí, mi avatar está inspirado en Haunter). Dicho esto, ¿por qué un recolector de basura incremental necesita barreras de escritura? – orlp
La "recolección incremental de basura" generalmente implica que el código de la aplicación puede ejecutarse entre los puntos cuando el escaneo del montón comienza y termina. Un objeto se considera basura y se recoge si el GC no puede encontrar ninguna referencia ... el problema ocurre cuando el GC escanea el bloque de memoria A, luego el código de la aplicación mueve la única referencia a un objeto del bloque B a A, y luego, el GC escanea el bloque B. Si el GC no nota que el bloque A fue modificado después de haber sido escaneado, nunca verá ninguna referencia al objeto y lo descartará. –
Esto está mal, no necesariamente necesita barreras de escritura en el código de la aplicación. Necesita acceso a la MMU para rastrear las escrituras de la memoria: en Windows tenemos una API de reloj de escritura de memoria. No es magia y no es realmente difícil. – Lothar