2008-10-20 7 views
6

J'écris un programme qui contient un garbage collector générationnel. Il n'y a que deux générations. Ce que je me demande c'est: quand je fais une collection complète, est-ce que je gagne quelque chose (performance) en recueillant d'abord les objets plus jeunes, en faisant la promotion des survivants à l'ancienne génération et en recueillant l'ancienne génération? un balayage? Je ne suis pas sûr de la façon dont les gens le font habituellement. J'utilise maintenant la méthode en deux étapes, car elle était un peu plus simple à mettre en œuvre, mais une méthode en une seule étape serait peut-être plus efficace?Devriez-vous recueillir la jeune génération d'abord dans une collection complète des ordures?

Le garbage collector est non-copying, si cela est important.

Répondre

5

Cela dépend de la fréquence à laquelle vous faites la promotion des survivants. Si vous les faites souvent, il semblerait que vous fassiez beaucoup mieux en effectuant le GC d'un seul coup. Si vous ne le faites pas, alors il semblerait qu'ils seront assez similaires.

De toute façon, il semble que vous fassiez un peu de travail redondant en le faisant en deux phases. Par exemple, toute personne bénéficiant d'une promotion est vérifiée deux fois (une fois jeune et de nouveau). Encore une fois, si cela n'arrive pas trop souvent, je m'en tiendrai à la méthode en deux étapes la plus simple (puisque vous l'avez déjà fonctionné et qu'il y a peu à gagner).

Questions connexes