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