este cenário é adequado para WeakReferences?

votos
1

Eu estou trabalhando em consultar o livro de endereços através de J2ME e retornando um Hashtable costume que eu vou chamar PIMList . As chaves em PIMList {nome, sobrenome} mapeia para um objeto (vamos chamar este objeto ContactInfo ) segurando (chave, valor) pares por exemplo work1 -> 44232454545, home1 -> 44876887787

Em seguida eu tomar firstName e adicioná-lo em uma árvore. Os nós da árvore contém os personagens do firstName . por exemplo, Tom criaria uma árvore com nós:

T->o->m-> ContactInfo{ work1 -> 44232454545, home1 -> 44876887787 }

Então a criança do último caractere m aponta para a mesma instância do objeto em PIMList . Pelo que entendi, o propósito da WeakReferences é que seu ponteiro é fraco e o objeto que aponta para pode ser facilmente GC'ed. Em um dispositivo de restrição de memória, como telefones celulares, gostaria de garantir que eu não vazar ou memória de resíduos. Assim, é apropriado para mim fazer:

  1. PIMList valores 's para ser um WeakReference
  2. O filho do nó m para apontar para WeakReference

?

Publicado 17/03/2009 em 05:15
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Não tenho certeza exatamente entendeu o que você tenta fazer, mas uma acessibilidade objetos é determinada pela referência mais forte a ele (referência duro é mais forte do que a referência suave que é mais forte do que referência fraca, que é mais forte do que a referência fantasma).

objetos referenciados rígidos não vai ser lixo coletado. objetos referenciados suaves serão lixo única coletadas se JVM ficar sem memória, objetos referenciados fracos serão lixo coletado o mais rápido possível (esta é a teoria que depende da JVM e implementação GC).

Por isso, normalmente você usa SoftReference para construir um cache (que pretende referenciar informações tanto tempo quanto possível). Você usa WeakReference para associar informações para um objeto que é difícil referenciado em algum lugar, por isso, se o objeto hardreferenced não é referenciado a informação associada pode ser lixo coletado - usar WeakHashMap para isso.

espero que isto ajude...

Respondeu 17/03/2009 em 09:24
fonte usuário

votos
1

Ele deve funcionar. Você vai precisar para lidar com o caso em que você estiver usando o Hashtable voltou e os itens são coletados no entanto ... o que pode significar que você quer repensar a coisa toda.

Se o Hashtable é de curta duração, em seguida, há provavelmente não é uma necessidade para as referências fracas.

Você pode remover os itens fora do Hashtable quando você está feito com eles, se você quer que eles sejam, possivelmente, limpo, enquanto o resto do Hashtable é stll sendo usado.

Respondeu 17/03/2009 em 05:24
fonte usuário

votos
0

Não tenho a certeza se o WeakMap é a coisa certa aqui. Se você não possuir referências fortes em qualquer lugar em seu aplicativo, os dados no mapa irá desaparecer quase imediatamente, porque ninguém está fazendo referência a ele.

Um mapa fraco é uma coisa boa, se você quiser encontrar coisas de novo, que ainda estão em uso em outro lugar e você só quer ter uma instância do mesmo.

Mas eu não pode obter seus dados configuração certa ... para ser honesto.

Respondeu 17/03/2009 em 05:41
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more