A proc nepouzijete WeakReference nebo  WeakHashMap?

  Lukas


2010/6/29 <michal.niko...@elanor.cz>

> mam tridu (smyslena, oholena jen na reprezentaci problemu):
>
> public class Neco implements INekohoJineho {
>  public String dejHodnotu(Object element){
>        String hodnota = Tool.casoveNarocnaMetoda(element);
>        return hodnota;
>  }
> }
>
> metoda dejHodnotu je volana v cyklu frameworku nade mnou a jsou i pripady,
> kdy je nekolikrat po sobe volana se stejnou instanci element. Hodne by se
> program zrychlil, kdybych si uchovaval posledni instanci element se kterou
> bylo volano a jaka pri ni byla vypoctena "hodnota". Problem je, ze si
> nemuzu dovolit drzet uvnitr tridy Neco referenci na element, protoze to
> nema kdo uklidit a zivotnost tridy Neco je vyrazne vyssi nez element.
>
> Napada me misto uchovat jenom System.identityHashCode(element) misto
> samotne reference na element, ale nemuzu se dopatrat jestli a z ceho
> vychazi System.identityHashCode(). Vzdy jsem myslel, ze v zajmu rychlosti
> jde o nativni implementaci, ktera proste vrati adresu instance na heapu.
> Pak by to bylo bezpecne, ale jistej si nejsem.
>
> jak by to teda pak vypadalo :
>
> public class Neco implements INekohoJineho {
>   private int ihc = Integer.MIN_VALUE;
>   private String hodnota = null;
>  public String dejHodnotu(Object element){
>        int foo = System.identityHashCode(element);
>        if (foo == ihc) return hodnota;
>        ihc = foo;
>        hodnota = Tool.casoveNarocnaMetoda(element);
>        return hodnota;
>  }
> }
>

Odpovedet emailem