Não li um livro sobre Java há muito tempo. Recentemente, li a linguagem de programação << Java de James Gosling >> e fiz algumas anotações de leitura. Esta parte é sobre reciclagem de lixo.
1. Reciclagem de lixo
Os objetos são criados usando o novo, mas não há operação de exclusão correspondente para reciclar a memória ocupada pelo objeto. Quando concluímos o uso de um objeto, precisamos apenas interromper a referência a esse objeto:
-> Altere a referência para apontar para outro objeto
-> apontar a referência a nulo
-> retornar do método para que as variáveis locais do método não existam mais
Pontos -chave:
-> Quando não podemos alcançar um objeto de qualquer código executável, o espaço necessário pode ser reciclado.
-> Reciclagem de lixo significa que nunca precisamos nos preocupar em referências pendentes. Uma referência falsa refere -se a uma referência ao espaço de memória que foi excluído. Esse problema existe em sistemas em que os programadores podem controlar diretamente quando os objetos são excluídos.
-> Modelo de coletor de lixo: método do contador de referência (não pode resolver referência circular), marca e varredura.
2. Resumo
Finalize o método
-> Depois que o coletor de lixo determina que o objeto é inacessível e que o espaço do objeto será reciclado, o coletor de lixo chamará esse método.
-> Este método pode limpar todos os recursos não memórias usados pelo objeto e só pode ser chamado uma vez para cada objeto. Mesmo que a execução desse método torne o objeto alcançado novamente e imediatamente se torne inacessível novamente, o método só poderá ser chamado uma vez.
O método -> Finalize pode ser chamado em qualquer período específico de tempo e nunca pode ser chamado (a máquina virtual Java).
Substituir o método de finalização
-> Quando um objeto se torna lixo, os outros objetos a que se refere também provavelmente se tornarão lixo. Esses lixo podem ter sido demitidos antes de chamar o método Finalize que escrevemos, para que possam estar em um estado imprevisível.
-> Substituir o método Finalize é adicionar o método super.finalize. É melhor adicioná -lo na frase finalmente. Certifique -se de que parte do conteúdo declarado em sua superclasse também possa ser encerrado.
Iii. Aulas e métodos relacionados para interagir com coletores de lixo
Classe: RunTime.GetRuntime (), System
Métodos: gc (), runfinalization (), freememory (), totalmemory (), maxmemory ()
A classe do sistema suporta métodos estáticos gc () e runfinalization (), que chamarão os métodos correspondentes no objeto de tempo de execução atual.
4. Estado de acessibilidade e objetos de referência
Um objeto só pode ser coletado de lixo quando nenhuma referência o especifica, mas às vezes podemos querer coletar o objeto como lixo quando ainda houver uma referência selecionada apontando para o objeto.
O único objetivo de um objeto de referência é manter uma referência a outro objeto chamado referência. Normalmente, mantivemos referências a objetos por meio de campos ou variáveis locais, mas agora podemos manter referências diretas a objetos de referência, que envolvem o objeto de que realmente precisamos. O coletor de lixo pode determinar se a referência residual a um objeto é referenciada ao objeto através da face do objeto de referência, para que possa decidir se deve reciclar o objeto. A força do objeto de referência determinará o comportamento do coletor de lixo, e as referências comuns são as referências mais poderosas.
Classe de referência
-> Pacote: java.lang.ref
-> Métodos típicos: get (), clear (), enqueue (), isenqueed ()
Citação e força de acessibilidade
-> Objetos são fortemente acessíveis: referência comum
-> Objeto é suavemente acessível: Softreference
-> Objetos são fracamente alcançáveis: Referência fraca
-> Objetos são praticamente acessíveis (Phantom Alcanced): Phantomreference
-> Objetos são inacessíveis: nenhum link de referência quando o objeto se torna fracamente acessível (ou na coluna fraca), ele pode ser encerrado. Se o objeto for inacessível após o término, ele poderá ser reciclado.
A fase de acessibilidade do objeto desencadeia o coletor de lixo a executar o comportamento apropriado nos tipos de objeto de referência relevantes:
-> Objetos suaves acessíveis podem ser reciclados pelo coletor de lixo. O que podemos ter certeza é que todas as softureferências para objetos de SoftReference serão limpas antes de lançar um erro de MemoryError.
-> Objetos bem acessíveis serão reciclados pelo coletor de lixo.
-> O objeto virtual acessível não é realmente acessível, porque seu objeto referencial não pode ser acessado por meio de referência fantasma, e seu método GET sempre retorna nulo. Mas a existência de referências virtuais pode impedir que os objetos sejam reciclados antes de limpar explicitamente as referências virtuais. As referências virtuais nos permitem lidar com objetos cujos métodos finalizados foram chamados, tornando seguro pensar que eles estão "mortos".