Bom, o meta-freak (eu) tem algo a dizer:
WeakReferences são referências que permanecem enquanto existir alguma referência forte pro mesmo alvo.
Ou seja, se eu tenho dois objetos, A e B, que tem referências prum P:
class A {
private P p;
public P getP() { return p;}
}
class B {
private WeakReference wrP;
public P getP() { return (P) wr.get();}
}
Posso fazer assim:
A a = new A();
B b = new B();
a.setP(new P());
b.setP(a.getP());
a.setP(null);
assert (b.getP() == null);
O que a gente tá querendo é uma SoftReference, que sobrevive caso o objeto não seja coletado. Ou seja, se o objeto passar pelo gc, e a única ref pra ele for uma SoftReference, ele morre.
Acho que um problema por si só interessante é lidar com a passivação (existe isso?) de objetos, independentemente de eu estar num sistema prevalente ou não.
Um Sistema Prevalente é um sistema que não pode cair. Que não vai cair. Dá pra quebrar assim: é só fazer um grafo de objetos grande demais pra caber na RAM, e um código que passeie comportadamente nele. O pobre do mecanismo de persistência vai ficar o resto da vida serializando proxy pra abrir espaço, deserializando pra acessar, e nunca retorna, e nunca dá exception!
Se a probabilidade de um objeto ser acessado é inversamente proporcional à idade dele, melhor nem passar pelo prevayler, bota em outro lugar! Nada te impede!
Volto a sugerir o Jisp pra isso.
[]s!!