Proc je Java priblizne 3x pomalejsi nez C++, cim je ta aplikace tak bzdena? A jde Javovska aplikace prelozit do nativniho kodu s rozumnymi vykonostnimi vysledky?
Pokud Javu brzdi nejvic garbage c., je mozne psat aplikaci s manualnim uvolnovanim zdroju jako v c++? Je k tomu nejaka dobra literatura?
Java je pomala dokedy neprebehne ~20 000 iteracii toho isteho kodu a ona to neprelozi do nativneho kodu. Sama, bez tvojej asistencie. Predtym to zdrzuje analyza - co sa vola, ako casto sa to vola a co s tym. Potom je to bez alokacii / GC na urovni C++ kodu minus par percent na beh GC. O tom sa presvedcis v jednoduchom benchmarku.
Pisat aplikaciu s manualnym uvolnovanim zdrojov ako v C++ priamo nejde. Mozes do objektov priradzovat null, takze sa ti niekam nezatula referencia, ktora by drzala alokovane zdroje. Mozes znovupouzivat objekty. To je design anti-pattern, ale usetris na behu GC a doba behu bude stabilna napriec iteraciami.
Toto generuje vela garbage:
while (haveData()) {
byte[] data = readDataOfConstantSize();
processBigData(data);
}
Toto je rychlejsie, ale budes mat problem, ked data nebudu konstantnej velkosti. Ked citanie neuspeje, budes tam mat stare data:
byte[] data = new byte[getDataSize()];
while (haveData()) {
readDataOfConstantSize(data);
processBigData(data);
}