Mi primer blog responde a su pregunta: Generations of Garbage Allocation
Adición de la información de enlace:
colector de basura del CLR (GC) es un recolector de basura generacional, también conocido como colector ephermal basura.
Tiene tres generaciones:
Generación 0: Contiene todos los objetos de nueva construcción que nunca se examinó mediante GC.
Generation 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. Por lo tanto la generación 0 se vería a continuación antes de la creación del objeto 6:
Después de la creación del objeto 6, la asignación de basura se inicia la cual libera los objetos de basura 1, 3 y 5 y se mueve 2 y 4 adyacentes entre otra en la generación 1.
El tamaño del presupuesto de generación 1 también se selecciona por CLR tras la inicialización. Creación de objeto 11 hace que el GC para empezar de nuevo que puede moverse un poco más objetos en generación 1.
Generación 1 se tiene en cuenta para la recolección de basura hasta que alcanza su tamaño del presupuesto para la recolección de basura, lo que mejora el rendimiento de GC.
Generación 2:
lo largo de los varios colección generación 0, 1 generación puede superar su límite de presupuesto que causan GC para recoger la basura de las dos 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 que asigna el objeto 21 porque se ha alcanzado la recolección de basura y el presupuesto de generación 1.
Así montón se vería a continuación con el objeto de que sobrevivieron en la generación 1 ascendido a la generación 2.
Así que, básicamente Generación GC asume que los objetos más recientes tienen más probabilidad de recogida.
Sabemos que CLR selecciona los presupuestos para las tres generaciones, pero puede modificarlos ya que GC es un colector 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.
Hola, ¿me puede decir cuándo el coleccionista recoge los objetos? Después de la ejecución de todos los métodos? – Bigeyes
No es apropiado hacer una pregunta como comentario en una pregunta de 7 años. Cada tutorial de Java le dirá que el GC se ejecuta en un hilo separado en el momento que elija. – duffymo
@duffymo y ¿qué tiene que ver el tutorial de Java con la pregunta de Bigeyes? A partir de la pregunta de OP de mi ingeniero, se trata de .net – MaLiN2223