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; > } > } >