Reference + desempenho =?

Boa tarde a todos,

Estava fazendo algumas pesquisas sobre as possibilidades de se usar referências fracas. Aqui no GUJ encontrei um post que falava duma situação semelhante a minha: http://www.guj.com.br/posts/list/129473.java

Não postei no mesmo tópico, pois não tinha certeza se seria interessante “ressucitá-lo” (apesar de não ser tão antigo)…

Minha dúvida é a seguinte:

Naquele caso da referência circular o uso de referência fraca previne o sistema de gerar vazamento de memória, correto? Que tipo de impacto esse uso tem no desempenho do sistema?

Estou pesquisando ainda, mas é difícil encontrar algo no google quando não se tem muita certeza sobre que palavras chaves adequadas a usar na busca.

Grato pela atenção.

[]
Éberson

Só um obs…

Referencias circulares não implicam que o GC não possa limpar os objetos

Exemplo:

class A {
      B b;
}
class B {
      C c;
}
class C {
      A a;
}

public class Teste {
     public static void main(String[] args){
           call();
           //todos os objetos a1 b1 c1 estarão alegíveis para o GC
     }
     static call(){
          A a1 = new A();
          B b1 = new B();
          C c1 = new C();
          a.b = b1;
          b.c = c1;
          c.a = a1;
     }
}

Nesse exemplo não há vazamento de memória…

Obrigado, rogelgarcia.

Eu fiquei na dúvida se aquele exemplo geraria vazamento de memória. Como tenho um ambiente parecido acabei pensando em fazer uso desse recurso para prevenir.
Em todo caso tenho, além desta situação, uma outra onde pensei em utilizar SoftReference para fazer cache de alguns dados e ainda não pude identificar seu impacto no desempenho do sistema.
Como tenho algumas dependências não pude fazer um teste prático para verificar esse desempenho e isso me preocupa, pois não tenho certeza de que o custo de processamento compense a otimização da memória.

Alguma dica/idéia?

Eu uso um WeakReference… pra fazer cache…

Não acho que tenha impactos significativos em performance nao…

Uso principalemente para fazer cache de informacoes que custam caro… como consultas em banco de dados…

A performance do WeakReference nesses casos com certeza será superior do que buscar a informacao novamente…

Espero ter ajudado

Até mais

Obrigado.

Ao menos vou poder fazer meus testes sabendo que a relação custo/denefício deve ser positiva desde que a minha implementação seja adequada.

Muito grato.

[]
Éberson