Reduza o uso da memória com fracoshashmap
-
20-09-2019 - |
Pergunta
No javadoc de Fracashashmap.html, disse
"Cada objeto -chave em um hashmap fraco é armazenado indiretamente como o referente de uma referência fraca. Portanto, uma chave será automaticamente removida apenas após as referências fracas, dentro e fora do mapa, foram limpas pelo coletor de lixo".
E depois
Observe que um objeto de valor pode se referir indiretamente à sua chave através do próprio mapa de fracos; Ou seja, um objeto de valor pode se referir fortemente a algum outro objeto -chave cujo objeto de valor associado, por sua vez, refere -se fortemente à chave do objeto de primeiro valor.
Mas a chave e o valor não devem ser usadas referência fraca no fracashashmap? ou seja, se houver baixa memória, o GC liberará a memória mantida pelo objeto Value (já que o objeto Valor provavelmente adota mais memória do que o objeto -chave na maioria dos casos)?
E se GC livre do objeto Valor, o objeto principal também poderá ser livre?
Basicamente, estou procurando um hashmap que reduza o uso da memória quando houver baixa memória (o GC coleta o valor e os objetos principais, se necessário).
É possível em Java?
Obrigada.
Solução
Referências fracas são inadequadas para caches - o NetBeans faz isso e pode ficar bobo.
SoftReference
é o que você quer. Na verdade, é muito difícil acertar - então copie a solução de outra pessoa. Algumas pessoas aconselham explicitamente o gerenciamento de cache.
Reference
S Só trabalha com uma única referência. Havia uma proposta para adicionar "Ephemerons" ao Java SE, mas não vi uma implementação ir a lugar algum com isso.
Outras dicas
A idéia é que você possa usar esse mapa como estrutura de dados "Lookup", que apenas mantém os pares de valores-chave vivos, que ainda podem ser referenciados (através de uma chave). Ainda assim, embora a ideia básica seja boa, lembro que não era tão útil quanto eu esperava que fosse.