2008-10-20 11 views
6

Estoy escribiendo un programa que contiene un recolector de basura generacional. Solo hay dos generaciones. Lo que me pregunto es: al hacer una colección completa, ¿obtengo algo (en cuanto a rendimiento) recolectando primero los objetos más jóvenes, promoviendo a los supervivientes a la generación anterior y luego coleccionando la generación anterior, o debería recoger todo en solo la basura? un barrido? No estoy seguro de qué manera la gente suele hacerlo.¿Debería recoger a la generación joven primero en una recolección de basura completa?

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

El recolector de basura no está copiando, si eso es importante.

Respuesta

5

Depende de la frecuencia con que promocione a los sobrevivientes. Si los promociona con frecuencia, parece que lo hará mucho mejor haciendo GC en un solo barrido. Si no lo haces, parece que serán bastante similares.

De cualquier manera, parece que se hace un poco de trabajo redundante al hacerlo en dos fases. Por ejemplo, cualquiera que sea promovido se verifica inherentemente dos veces (una vez tan joven y otra vez como mayor). De nuevo, si esto no ocurre con demasiada frecuencia, me quedaría con el método más simple de dos pasos (ya que ya lo tienes funcionando y hay poco que ganar).

Cuestiones relacionadas