Se você coletar a geração mais jovem primeiro de uma coleta de lixo completa?
-
03-07-2019 - |
Pergunta
Eu estou escrevendo um programa que contém um coletor de lixo geracional. Há apenas duas gerações. O que eu pergunto é: Ao fazer uma coleção completa, que eu ganho nada (em termos de performance), primeiro recolher os objetos mais jovens, promovendo os sobreviventes para a velha geração, e depois recolher a velha geração, ou devo apenas lixo tudo a cobrar no uma varredura? Não tenho certeza de qual caminho as pessoas costumam fazê-lo.
Eu estou usando o método de duas etapas agora, uma vez que foi um pouco mais simples de implementar, mas talvez um método de uma etapa seria mais eficiente?
O coletor de lixo não é copiar, se o que importa.
Solução
Depende de quantas vezes você promover sobreviventes. Se você promovê-los muitas vezes, então parece que você vai fazer muito melhor fazendo GC em uma varredura. Se não o fizer, então parece que eles vão ser muito similar.
De qualquer maneira, parece que se você fizer um pouco de trabalho redundante por fazê-lo em duas fases. Por exemplo, alguém que é promovido fica inerentemente verificada duas vezes (uma vez como jovem e novamente como idade). Novamente, se isso não acontece muitas vezes, eu ia ficar com o método mais simples de duas etapas (uma vez que você já tem que trabalhar e há pouco a ganhar).