¿Debería reunir a la generación joven primero en una recolección de basura completa?

StackOverflow https://stackoverflow.com/questions/219540

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un programa que contiene un recolector de basura generacional. Sólo hay dos generaciones. Lo que me pregunto es: cuando hago una colección completa, ¿obtengo algo (en cuanto al rendimiento) al recolectar los objetos más jóvenes, promoviendo a los sobrevivientes a la vieja generación y luego recolectando a la generación anterior, o debería simplemente recolectar todo en la basura? un barrido? No estoy seguro de cómo las personas suelen hacerlo.

Estoy usando el método de dos pasos ahora, ya que fue un poco más sencillo de implementar, pero ¿quizás un método de un paso sería más eficiente?

El recolector de basura no copia, si eso importa.

¿Fue útil?

Solución

Depende de la frecuencia con la que promuevas a los sobrevivientes. Si los promocionas a menudo, parece que lo harás mucho mejor haciendo GC en un barrido. Si no lo haces, entonces parece que serán bastante similares.

De cualquier manera, parece que haces un poco de trabajo redundante haciéndolo en dos fases. Por ejemplo, cualquier persona que obtenga un ascenso se verifica de forma inherente dos veces (una vez que es joven y otra vez como vieja) Nuevamente, si esto no sucede con demasiada frecuencia, me quedo con el método más simple de dos pasos (ya que ya lo tienes funcionando y hay poco que ganar).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top