recolector - java gc generations
Múltiples recolectores de basura en Java (2)
Supongo que tienen piscinas superpuestas.
Esta suposición es errónea. PS Scavenge se utilizará en la generación joven (eden, survivor) y PS MarkSweep se usará en la generación anterior. La única "superposición" es que PS Scavenge moverá los objetos a la generación anterior una vez que hayan estado alrededor durante un tiempo y dejará que PS MarkSweep se ocupe de ellos.
La ventaja de tener diferentes recolectores de basura para diferentes agrupaciones es que un algoritmo que funciona bien para los objetos en la agrupación de eden no necesariamente funcionará bien para los objetos de la generación anterior.
En cuanto a las colecciones "principales" que ocurren cuando no hay espacio para mover objetos a la generación anterior, este documento técnico (ciertamente antiguo) de Sun dice lo siguiente:
... el algoritmo de colección de generación joven no se ejecuta. En su lugar, el algoritmo de recopilación de la generación anterior se utiliza en todo el montón.
Cada proceso de Java que comienzo en mi máquina parece tener dos recolectores de basura por defecto. Estoy comprobando esto a través de JConsole.
Ejemplo - para mi Eclipse actualmente en ejecución.
PS MarkSweep
Collection Count - 221
Collection Time - 102118
Memory Pool Names - java.lang.String[4]
PS Scavenge
Collection Count - 241
Collection Time - 2428
Memory Pool Names - java.lang.String[2]
Supongo que tienen piscinas superpuestas. ¿Cómo trabajan juntos dos recolectores de basura cuando usan las mismas piscinas (Eden, survivor, old gen)? ¿No hay superposición en el movimiento de objetos entre grupos (como el movimiento de un sobreviviente a otro cuando se llama el segundo algoritmo)? Incluso si no lo es, ¿por qué necesitamos más de un colector por grupo?
He leído este artículo en GC . Se refieren al uso de diferentes colectores para diferentes GC mayores y menores, pero no parece haber ninguna referencia al uso de múltiples colectores en el mismo grupo.
Forma el artículo que has proporcionado:
Normalmente, una fracción de los objetos supervivientes de la generación joven se mueven a la generación titular durante cada colección menor. Eventualmente, la generación titular se llenará y deberá ser recolectada, lo que resultará en una gran colección, en la cual se recolectará todo el montón. Las colecciones principales suelen durar mucho más que las colecciones secundarias porque se trata de un número significativamente mayor de objetos.