Respuesta

20

Un GC generacional es siempre incremental, ya que no recoge todos los objetos inalcanzables durante un ciclo. Por el contrario, un GC incremental no necesariamente utiliza un esquema de generación para decidir qué objetos inalcanzables recolectar o no.

Un GC generacional divide los objetos inalcanzables en diferentes conjuntos, aproximadamente de acuerdo con su último uso, su edad, por así decirlo. La teoría básica es que los objetos que se crearon más recientemente se volverían inalcanzables rápidamente. Entonces el conjunto con objetos 'jóvenes' se recoge en una etapa temprana.

Un GC incremental puede se puede implementar con el esquema generacional anterior, pero se pueden emplear diferentes métodos para decidir qué grupo de objetos se debe barrer.

Uno podría mirar this wikipedia page y más hacia abajo, para más información sobre ambos métodos de GC.

Según el sitio web de Boehm, la GC es gradual y generacional:

El colector utiliza una marca y barrido algoritmo. Proporciona la recopilación generacional incremental y bajo los sistemas operativos que proporcionan el tipo correcto de soporte de memoria virtual .

En lo que se refiere a un entorno de tiempo real, hay varios trabajos de investigación académica que describe formas nuevas e ingeniosas para hacer la recolección de basura:

17

Un incrementales recolector de basura es cualquier recolector de basura que se puede ejecutar de forma incremental (lo que significa que puede hacer un poco de trabajo, luego un poco más de trabajo, luego un poco más de trabajo), en lugar de tener que correr toda la colección sin interrupción. Esto contrasta con los viejos recolectores de basura del mundo que lo hicieron, p. una marca & barre sin ningún otro código que pueda trabajar en los objetos. Pero para ser claros: Si un recolector de basura incremental realmente ejecuta en paralelo con otro código ejecutándose en los mismos objetos no es importante mientras sea interrumpible (para lo cual tiene, por ejemplo, que distinguir entre objetos sucios y limpios).

A generational basurero diferencia entre objetos antiguos, medianos y nuevos. Luego puede copiar GC en los objetos nuevos (palabra clave "Eden"), marcar & barrer para los objetos antiguos y diferentes posibilidades (dependiendo de la implementación) en los objetos medianos. Dependiendo de la implementación, la forma en que se distinguen las generaciones de objetos es por región ocupada en la memoria o por banderas. El desafío del GC generacional es mantener listas de objetos que se refieren de una generación a la otra.

Boem es un GC generacional gradual, como se cita aquí: http://en.wikipedia.org/wiki/Boehm_garbage_collector

+0

¿Qué es esto Eden? – kingsmasher1

+0

La joven generación está dividida en espacio, desde el espacio y el Edén. La asignación se realiza en el espacio y en el Edén, tanto el espacio como el Edén se copian en el espacio de la colección; la diferencia es que Eden se borra por completo. Para obtener más información, eche un vistazo aquí y busque en la página de Eden: http://java.sun.com/docs/hotspot/gc1.4.2/faq.html –

3

http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection

Algunos algoritmos de recolección de basura de seguimiento pueden hacer una pausa en medio de un ciclo de recogida, mientras que el mutador continúa, sin acabar con datos inconsistentes. Dichos colectores pueden operar de forma incremental y son adecuados para usar en un sistema interactivo.

Recolectores de basura primitivos (1), una vez que comienzan un ciclo de recolección, deben finalizar la tarea o abandonar todo su trabajo hasta el momento. Esto es a menudo una restricción apropiada, pero es inaceptable cuando el sistema debe garantizar tiempos de respuesta; por ejemplo, en sistemas con una interfaz de usuario y en sistemas de control de hardware en tiempo real. Dichos sistemas pueden usar la recolección de basura incremental para que el procesamiento crítico en el tiempo y la recolección de basura puedan continuar de manera efectiva en el paralelo , sin esfuerzos desperdiciados.

http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection

recolección de basura generacional está trazando la recolección de basura que hace uso de la hipótesis generacional. Los objetos se juntan juntos en generaciones. Los objetos nuevos se asignan en la generación de guardería más joven o , y se promueven a generaciones anteriores si sobreviven. Los objetos en generaciones anteriores se condenan con menos frecuencia, lo que ahorra tiempo de CPU .

Por lo general, es raro que un objeto haga referencia a un objeto más joven. Por lo tanto, los objetos en una generación suelen tener pocas referencias a los objetos en las generaciones más jóvenes. Esto significa que el escaneo de antiguas generaciones de en el transcurso de la recopilación de generaciones más jóvenes puede ser hecho de manera más eficiente mediante conjuntos recordados.

En algunos lenguajes puramente funcionales (es decir, sin actualización), todas las referencias están hacia atrás en el tiempo, en cuyo caso los conjuntos recordados son innecesarios.

El Boehm-Demers-Weiser tiene un modo incremental que puede habilitar llamando al GC_enable_incremental. Ver http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html

Cuestiones relacionadas