2012-03-26 16 views
12

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.

Respuesta

13

implementaciones actuales (Druntime) utilizan un recolector de basura stop-el-mundo, pero el lenguaje en sí no pone muchas restricciones sobre los detalles de una implementación.

Hay un recolector de basura concurrente para D, CDGC, para sistemas operativos * nix-like (usa bifurcación).

Los GC incrementales son difíciles de usar en un entorno compilado, debido a la necesidad de barreras de escritura. Las máquinas virtuales pueden rastrear referencias, sin embargo, los idiomas del sistema, que pueden llamar al memcpy y funciones similares, no pueden.

+0

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

+6

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á. –

+0

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

Cuestiones relacionadas