単純なキャッシュ
class test{ public ElementType getElement(long id) { ElementType ret = null; for (ElementType et : rootnode.getElement()) { if (et.getId() == id) { ret = et; break; } } return ret; } }
という頭の悪いコードがあったのだが、これを
class test{ final static int cache_size = 100; ElementType[] et_cache; public test(){ et_cache = new ElementType[cache_size]; } public ElementType getElement(long id) { ElementType ret = null; int tmp=((int) id) % cache_size; if (et_cache[tmp]!=null&&et_cache[tmp].getId() == id) { ret = et_cache[tmp]; } else { for (ElementType et : rootnode.getElement()) { if (et.getId() == id) { ret = et; break; } } et_cache[tmp] = ret; } return ret; } }
とやっぱり頭の悪い改造を加えてみたところ、あまり期待していなかったのに結構早くなった。少ないながらもキャッシュに引っかかることがあったのだろう。