unidos servicio residuos recolección recoleccion que numero influyen generacion factores estados empresas dias definicion cual basura .net garbage-collection

.net - servicio - ¿Cuáles son las generaciones en la recolección de basura?



recoleccion de residuos empresas (3)

No he entendido las generaciones de Garbage Collection, aunque encontré algunas de Google. ¿Puede alguno de ustedes por favor decirme en términos simples sobre eso?

O puede hacer referencia a un enlace que será fácil de entender!


De Understanding Garbage Collection en .NET

Generaciones

Un recolector de basura generacional recoge los objetos efímeros con mayor frecuencia que los objetos de vida más larga. Los objetos de vida corta se almacenan en la primera generación, generación 0. Los objetos de mayor duración se insertan en las generaciones superiores, 1 o 2. El recolector de basura funciona con mayor frecuencia en las generaciones más bajas que en las superiores.

Cuando se crea un objeto por primera vez, se pone en la generación 0. Cuando se llena la generación 0, se invoca el recolector de basura. Los objetos que sobreviven a la recolección de basura en la primera generación se promocionan a la siguiente generación superior, generación 1. Los objetos que sobreviven a la recolección de basura en la generación 1 se promocionan a la generación siguiente y la generación más alta, generación 2. Este algoritmo funciona eficientemente para basura colección de objetos, ya que es rápido. Tenga en cuenta que la generación 2 es la generación más alta admitida por el recolector de basura.

Recolección de basura en .NET

Generaciones

Si bien la asignación de memoria en el montón administrado es rápida, el GC en sí puede tardar un tiempo. Con esto en mente, se han realizado varias optimizaciones para mejorar el rendimiento. El GC apoya el concepto de generaciones, basado en la suposición de que cuanto más tiempo haya estado un objeto en el montón, más tiempo permanecerá ahí. Cuando un objeto se asigna en el montón, pertenece a la generación 0. Cada colección de basura que ese objeto sobrevive aumenta su generación en 1 (actualmente, la generación más alta admitida es 2). Obviamente, es más rápido buscar y la basura recoge un subconjunto de todos los objetos en el montón, por lo que el GC tiene la opción de recopilar solo objetos de generación 0, 1 o 2 (o la combinación que elija hasta que tenga suficiente memoria). Incluso cuando se recopilan solo objetos más jóvenes, el GC también puede determinar si los objetos antiguos tienen referencias a objetos nuevos para garantizar que no ignore inadvertidamente los objetos en uso.


Hay una buena descripción en "Pro C # 2008":

  1. La Generación 0 identifica un objeto recién creado que nunca ha sido marcado para colección
  2. La Generación 1 identifica un objeto que ha sobrevivido a un GC (marcado para la recopilación pero no eliminado porque había suficiente espacio en el montón)
  3. La Generación 2 identifica un objeto que ha sobrevivido a más de un barrido del GC.

Mi primer blog responde a tu pregunta: Generaciones de asignación de basura

Agregar la información sobre el enlace:

El recolector de basura de CLR (GC) es un recolector de basura generacional, también conocido como recolector de basura ephermal.

Tiene tres generaciones:

Generación 0: contiene todos los objetos recién construidos que nunca son examinados por GC.

Generación 1: El CLR, cuando se inicializa, selecciona un tamaño de presupuesto en kb para la generación 0. Si la creación de un objeto hace que la generación 0 supere su presupuesto, se inicia la collección de basura. Los objetos que no se recogen en la Generación 0 se mueven a la Generación 1 y la Generación 0 se vacía. Digamos que el presupuesto de la Generación 0 es igual al tamaño de 5 objetos. Entonces la generación 0 se vería más abajo antes de la creación del objeto 6:

Después de la creación del objeto 6, se inicia la asignación de basura que desasigna los objetos de basura 1, 3 y 5 y mueve 2 y 4 adyacentes entre sí en la Generación 1.

El tamaño de presupuesto de la generación 1 también es seleccionado por CLR al inicializarse. La creación del objeto 11 hace que el GC comience de nuevo, lo que puede mover algunos objetos más a la generación 1.

La generación 1 se ignora para la recolección de basura hasta que alcanza su tamaño de presupuesto para la recolección de basura, lo que mejora el rendimiento de GC.

Generación 2:

En la colección de varias generaciones 0, la generación 1 puede superar su límite presupuestario, lo que hace que GC recolecte la basura de ambas generaciones. En este caso, los sobrevivientes de la generación 1 son promovidos a la generación 2, los sobrevivientes de la generación 0 son promovidos a la generación 1, y la generación 0 está vacía.

Digamos el objeto de asignación 21 porque se ha alcanzado la recolección de basura y el presupuesto de generación 1.

Así que el montón se vería más abajo con el objeto que sobrevivió en la Generación 1 promovido a la generación 2.

Entonces, básicamente, Generation GC asume que los objetos más nuevos tienen más probabilidad de ser recolectados.

Sabemos que CLR selecciona los presupuestos para las tres generaciones, pero puede modificarlos ya que GC es un recopilador autoajustable. Si GC ve que hay muy pocos objetos supervivientes después de recoger la generación 0, podría decidir reducir el presupuesto de la generación 0, para que se haga un trabajo menor. Por otro lado, si GC recoge la generación 0 y ve que hay muchos objetos supervivientes, no se recuperó mucha memoria en la recolección de basura. En este caso, el recolector de basura aumentará el presupuesto de la generación 0. El GC también modifica los presupuestos de la generación 1 y la generación 2 en consecuencia.