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.

Foi útil?

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.

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

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