As coletas de lixo precisam visitar todos os objetos que estão vivos, para encontrar a memória que pode ser recuperada. (Ter muitas gerações atrasa um pouco isso)
Sendo tudo igual, é claramente melhor visitar primeiro o objeto que já está paginado na RAM, antes de paginar outro bloco e, portanto, paginar algum objeto.
Outra possibilidade é que, quando o sistema operacional deseja retirar uma página do ram do processo, primeiro o GC é perguntado se ele possui uma página que pode ser abandonada sem precisar ser paginada. O GC pode ser feito principalmente com o movimento de objetos de uma página, para que possa ser apagada dentro do prazo que o sistema operacional precisa para uma página.
No entanto, não consigo lembrar de nenhum coletor de lixo que se integre ao sistema de paginação do SO que conduz a ordem em que o GC trabalha.
fonte
Respostas:
Pelo que me lembro, os coletores de cópias devem ser amigáveis para paginação, pois o rastreamento copiando tende a melhorar a localidade das referências de ponteiro. Isso tem um efeito positivo no programa (mutador) que causará menos falhas de página ao seguir os links e também melhorará o próximo ciclo de coleta, pois o rastreamento também causará menos falhas de página. A agenda de rastreamento (quais ponteiros devem ser processados primeiro) pode ter um impacto na eficácia para melhorar a localização dos dados. Isso pode ser aprimorado medindo estatísticas sobre o número de acesso a diferentes ponteiros em diferentes tipos de células.
Agora, se você considerar um coletor de rastreamento em geral, geralmente deverá manter uma estrutura que controla os ponteiros que ainda não foram rastreados. Pode ser possível organizar essa estrutura para que todos os ponteiros em espera apontando na mesma página sejam mantidos juntos (embora isso possa exigir mais espaço, em alguns casos, dependendo das técnicas disponíveis para manter a lista desses ponteiros). Uma política possível é sempre rastrear primeiro o maior conjunto de ponteiros em espera apontando para a mesma página, quando não houver ponteiro em espera para as páginas na memória.
Em relação à pergunta do terceiro parágrafo, que foi adicionada após a resposta, a coleta de cópias é novamente uma resposta. O sistema operacional pode reduzir o número de páginas físicas alocadas no momento da coleta, pois as páginas são completamente liberadas. Com um coletor de marca e varredura, o evento de uma página inteira ficar livre é provavelmente muito mais raro, portanto não vale um machanismo específico a ser levado em consideração.
Esse tipo de idéia é natural e provavelmente é descrito em alguns dos documentos. Mas não me lembro de imediato. Eu acho que os primeiros artigos sobre o Lisp GC contêm algumas dessas idéias (como: carro ou cdr devem ser seguidos primeiro?).
As boas notícias nesta função de coleção de cópias também são que a paginação é amigável para copiar a coleção, pois aumenta o espaço de armazenamento disponível. Lembre-se de que o coletor de cópias requer, em princípio, o dobro do espaço usado para o armazenamento de dados real. Agora, o efeito da paginação depende também do espaço de endereço da máquina e da memória física disponível. No computador antigo, a memória física era muito menor que o espaço de endereço disponível, de modo que a paginação era realmente um bônus de espaço, permitindo políticas como copiar o GC. Mesmo quando o espaço físico é tão grande quanto o espaço de endereço, convém compartilhá-lo, para que o processo usando um GC tenha menos espaço de endereço sem paginação (consulte Paginação) Essas observações são um pouco substituídas pelo uso de coletores geracionais. Eles geralmente usam a coleção de cópias para a geração jovem precisamente por causa dessas qualidades e porque a geração jovem tem vida curta.
Então você tem todas as interações do GC geracional com o sistema de cache, que foram discutidas em uma pergunta anterior: Os coletores de lixo geracionais são inerentemente compatíveis com o cache?
Para obter mais informações sobre esse problema, eu pesquisaria na web, por exemplo, as palavras-chave coleta de lixo e localidade .
fonte
Emery Berger, Matthew Hertz e Yi Feng fizeram alguns trabalhos sobre isso.
Este é um vídeo da palestra de Emery e ele escreveu um artigo Coleta de Lixo Sem Paginação
Por algumas razões, parece não haver muito trabalho posterior, ou qualquer uso no mundo real. No final do artigo, diz: "Estamos desenvolvendo uma variante simultânea do algoritmo de coleta de favoritos" , mas não consigo identificá-lo.
CRAMM: O suporte de memória virtual para aplicativos coletados de lixo procura alterar o sistema operacional para fazer o GC criar menos paginação.
Usando a residência da página para equilibrar as compensações no rastreamento da coleta de lixo
fonte