[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