środa, sierpnia 08, 2012

Java na Raspberry Pi zaskakuje ;-)

Kto pisze w Java'ie ten może zna pewną sztuczkę na przyśpieszenie kodu. W kodzie produkcyjnym lepiej użyć jako zmiennych klas konkretnych niż interfejsów.
Znaczy zamiast List<Integer> list = new ArrayList<Integer>(); z powodów wydajnościowych lepiej użyć ArrayList<Integer> list = new ArrayList<Integer>(); 
Taka lista będzie szybsza o 30% do 60%.
JVM nie musi tak bardzo skakać po metodach wirtualnych i takie tam.
Google nawet poleca tą sztuczkę w developmencie dla Androida, jako coś co może pomóc. Znaczy coś jest na rzeczy ;-) [powtarzam w kodzie produkcyjnym, nie tym w developmencie].
Niestety na Pi to nie działa...... ba nawet wyniki mogą być gorsze ;-)
W moim teście na PC wersja z klasą konkretną potrzebowała 45% czasu wersji z interfejsem... na Pi potrzebowała 101% ;-)
Przez to kod na Pi wykonywał się 1834 razy wolniej, a mógł 815 razy wolniej ;-)
Zresztą praca z kolekcjami na Pi jest szczególnie wolna. Tworzenie nowych obiektów czy operacje z łańcuchami (ohydne str+=""+i) są na Pi jakieś 450 razy wolniejsze niż na PC, arytmetyka jakieś 50 razy, a operacje na listach od 800 do 1800 razy wolniejsze ;-)

Btw. macie jakieś pomysły na dobre przetestowanie wydajności Java'y? Ogólnie chodzi mi o coś co pozwoliłoby na stworzenie kilku zasad, których bym mógł przestrzegać pisząc na Pi ;-)

#toBlogger

[Go to original post on Google+]




Podobne postybeta
Nie taka klasa konkretna straszna....
Java 8 nadchodzi....
Giń konstruktorze! Giń! ;-)
GCJ mnie przerosło ;-)
Java 32 bit vs. Java 64 bit