Hay un algoritmo de recolección de basura no experimental que cumple con todos sus requisitos: recuento automático simple. En general, el recuento realmente no tiene suficiente crédito como una opción viable, pero en realidad funciona muy bien en muchas situaciones, nunca hay grandes retrasos de lotes y no hay necesidad de complicada magia.
Una preocupación sigue siendo la limpieza de referencias circulares, que al menos puede dejar de hacer con muy poca frecuencia; Los desarrolladores de aplicaciones que se preocupan por la velocidad pueden simplemente romper los bucles explícitamente cuando necesitan que los objetos se vayan.
Una característica poco apreciada de refcounting es que es mucho más amigable con el caché que otras formas de recolección de basura.Si está ejecutando un bucle que asigna algunos pequeños objetos temporales en todo momento a través del bucle, un GC de recuento (o gestión de memoria explícita, por supuesto) puede reutilizar la misma memoria cada vez, evitando descargas de caché innecesarias. Cualquier otro tipo de GC solo liberaría los objetos periódicamente, lo que daría como resultado una memoria mucho más grande y, por lo tanto, lentitud.
El recuento de contaje no es muy eficiente para los sistemas de múltiples subprocesos, ya que debe adquirir bloqueos cada vez que toca el recuento. Pero si está diseñando un nuevo idioma de todos modos, hay una gran cosa que puede hacer para mejorar el rendimiento y la confiabilidad en todo su idioma: evite que casi todos los objetos se compartan entre subprocesos. es decir. hacer que compartir sea explícito Si lo haces, sabrás cuáles son los objetos que no son compartidos, y por lo tanto cuáles deben bloquearse al aumentar/disminuir el recuento y que pueden dejarse desbloqueados. Cuando no hay ningún bloqueo, el rendimiento de recuento puede ser realmente excelente.
Si destinados a .NET o plataforma Java que se obtener una gratis. –
Aquí hay una ridículamente buena [serie de artículos] (http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx) en la recolección de basura. – jason
@Henk, él está escribiendo un compilador – ThomasMcLeod