Se você coletar a geração mais jovem primeiro de uma coleta de lixo completa?

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

  •  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.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top