Java Lambdas jsou několikanásobně pomalejší

Natix

Re:Java Lamdas slow as fak
« Odpověď #15 kdy: 19. 03. 2016, 21:49:14 »
Pokud zůstaneme jenom u posledních dvou příkladů, tak drobnou změnou lze dostat výrazně jiné výsledky:

řádku

Kód: [Vybrat]
supp += vypocet(new Parameters(i, i));
nahradíme

Kód: [Vybrat]
supp += Integer.valueOf(i) * Integer.valueOf(i);
Výsledek měření:

Kód: [Vybrat]
1 106 232 471 ns
1 286 946 604 ns

Jde o to, že v případě ručního boxingu pomocí třídy Parameters se alokuje jeden objekt za iteraci, zatímco u autoboxingu se alokují objekty dva. Použití Parameters je díky tomu skoro 2x rychlejší:

Kód: [Vybrat]
707 933 084 ns
1 256 313 255 ns

V předcházejících třech případech se provádí jenom unboxing, takže jsou pochopitelně rychlejší.


Pavel Tisnovsky

Re:Java Lamdas slow as fak
« Odpověď #16 kdy: 19. 03. 2016, 21:52:44 »
Takže ne lambda, ale java jitr slow as fak. No a co lambdy a JavaFX eventy, tam mi to vylozene prijde ze eventy ve swingu jsou praktičtější, proste dam addListener(new Handler(){..} ) a prepisu si eventy na ktere chci reagovat v jedinem  addListenerovi, navic je to i prenositelnejs na starsi jdk.

Nee, JIT ma urcite vlastnosti, kdy se spusti a jak funguje. Pokud se navic napise neekvivalentni kod (coz ta posledni cast je), tak se to proste nedava dobre porovnavat.

Spis se zeptam - je to problem v realne aplikaci, nebo Te zajima, proc je to skutecne pomale? V prvnim pripade - uz to neres, sam vidis, ze prvni reseni je rychlejsi, problem solved, muzes resit dalsi problemy. Pokud je to druhy priklad, tak je skutecne dobre se podivat na ten bajtkod.

Natix

Re:Java Lamdas slow as fak
« Odpověď #17 kdy: 19. 03. 2016, 21:57:28 »
A ještě dodatek: I použití lambdy jde výrazně zrychlit použitím neboxující lambdy:

Pokud místo
Kód: [Vybrat]
BinaryOperator<Integer> op = (a, b) -> a * b;použijeme
Kód: [Vybrat]
IntBinaryOperator op = (a, b) -> a * b;tak dostaneme časy:
Kód: [Vybrat]
718 975 989 ns
382 852 492 ns

Je ovšem otázka, jestli v reálném softwaru je takovýto rozdíl v performance skutečným problémem či ne, a zda znečištění javovského API explozí primitivních variant všech funkcionálních interfaců stálo za to.

čumil

Re:Java Lamdas slow as fak
« Odpověď #18 kdy: 20. 03. 2016, 00:16:28 »
Jak uz zde nekteri mi priznivci vedi, mam rad eventy a Javu, a tak jsem si zkousel zmerit rychlost standardnich konstrukci s temi lamdovskymi a ve vsech pripadech mi vyslo, ze lambdy jsou pomalejsi, v nekterych pripadech az nekolikanasobne. A ja blahovy jsem si myslel, ze lambdy v pozadi konecne funguji jako primy vstup do metody/funkce, a ono zrejme ne. Dela se z nich az moc velke terno ale je to fakt slabota. Zejo?

Změň jazyk ;)

Tak určitě, ať zahodí ten nejlepší a jde do nějakého horšího. Takhle se to nedělá. Nejdříve se naučím jeden dobře a až pak se dívám jinam. Hlavně měl štěstí, protože si vybral zrovna to nejlepší. Jen tomu musí věnovat pár let, aby se dostal na trochu lepší úroveň.
Nezapomeň na domácí úkoli a ten test z matematiky příští pondělí synu.

Lol Phirae

Re:Java Lamdas slow as fak
« Odpověď #19 kdy: 20. 03. 2016, 00:30:41 »