[Java lista] Oracle Java performance
Vig Balázs
Balazs.Vig at dataexplorer.hu
2009. Jún. 22., H, 14:53:30 CEST
Sziasztok!
Van egy feladatunk, ami egy elég bonyolult képlet segítségével számít ki egy értéket. Úgy döntöttünk, hagy Java segítségével oldjuk meg a problémát. El is készült a programocska, ami kliens gépen futtatva 53 mp alatt futott le, adatbázisba betöltve viszont már 1004 mp kellett neki. Ez a csaknem 20szoros különbség egy kicsit elkedvtelenített.
A megoldás során az adatokat kétdimenziós double tömbökbe töltjük be, elvégezzük a varázslatot, és visszaírjuk az adatbázisba az eredményt.
A logok megnézése során azt látom, hogy a memória foglalások elég lassúak (átlagosan 58 vs 3 msec).
Viszont az idő kb 85%-át mégiscsak az eredmény kiszámítása foglalja le, átlagosan 27x több időt használva, mint a kliensen. Itt már kész 2d tömbökből olvassuk ki az adatokat két egymásba ágyazott for ciklussal, osztunk, szorzunk, négyzetre emelünk, logaritmust számolunk.
Az a logokból nem derül ki, hogy a tömbértékek kiolvasása tart sokáig, vagy a matematikai művelet elvégzése.
A fentiekből én azt látom, hogy az Oracle nem szeret (2d) tömbökkel dolgozni. Probáltam minimalizálni a tömbműveletek számát, de sajnos így sem lett sokkal gyorsabb.
Tudtok-e valami megoldást erre a problémára? Esetleg más adatszerkezetet kellene használni?
Kösz:
VigB
ui: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
További információk a(z) Javalist levelezőlistáról