O que é uma referência fraca?
Uma referência fraca é uma referência a um objeto na memória que não impede que um objeto seja limpo por rotinas de coleta de lixo devido à sua associação com o objeto. Esse tipo de referência é comumente usado para ajudar a eliminar vazamentos de memória quando existem condições especiais que impedem que a coleta normal de lixo aconteça. Algoritmos de programação que usam uma referência circular ou mantêm informações estranhas em um benefício de cache ou estrutura especial usando referências fracas. A utilização de referências fracas nesses tipos de situações permite a limpeza de objetos referentes não utilizados e suas referências fracas associadas.
Na programação de computador, uma forte referência é normalmente criada por padrão quando um objeto é criado, e a memória ocupada pelo objeto permanece alocada enquanto a forte referência permanecer viável. Uma referência forte se torna anulada e seu associadoA memória do objeto é libertada logo após uma forte referência e seu objeto é sinalizado como não está mais sendo usado por um programa. Em determinadas situações, como programação de soquete ou aplicativos de manipulação de imagem, as classes usadas para criar objetos de trabalho não possuem a capacidade interna de armazenar informações adicionais necessárias por um aplicativo específico. Os detalhes adicionais para objetos transitórios, como conexões ou imagens, precisam ser armazenados em objetos de cache suplementares e vinculados aos objetos transitórios por referências. Quando uma referência fraca é usada em vez de referência forte, as informações extras não estão vinculadas pela referência e podem ser removidas do cache pelo coletor de lixo depois que o objeto referente for marcado como não viável.
As classes de referência fracas estão normalmente disponíveis em idiomas que são aumentados por subsistemas de coleta de lixo, incluindo Java, Python, Perl, C#e a estrutura .NET. Em C ++, no entanto, os programadores geralmente são resPonsible para garantir a limpeza da memória. Esse idioma implementou uma classe de ponteiro inteligente que fornece algumas das mesmas funcionalidades que as referências fracas e a coleta de lixo fornecem, ajudando a reduzir os vazamentos de memória causados pela limpeza inadequada do ponteiro.
Para facilitar ainda mais o gerenciamento da memória, os idiomas com instalações de coleta de lixo podem aumentar adicionalmente a funcionalidade de um idioma, fornecendo gradientes mais finos de referências diferentes da referência forte ou fraca. Tipos de dados, como referências suaves e referências fantasmas, podem ser incluídas nesses idiomas, o que permite níveis variados de notificação de recuperação ou desalocação de objetos. Os programadores que usam linguagens com coleta de lixo automatizados devem se familiarizar com todas as classes de referência disponíveis para melhorar o desempenho do aplicativo.