Wpis z mikrobloga

@leoha: Tylko należy tutaj zadać pytanie jaki wpływ na wydajność programu ma samo iterowanie po kolekcji, a jaki pozostałe operacje wykonywane na jej elementach. W rzeczywistych przykładach okaże się, że optymalizacja pętli spowodowała wzrost wydajności o oszałamiające 0.01% ( ͡° ͜ʖ ͡°)

Tak jak w przypadku uC taka zabawa może mieć sens, tak w przypadku helloworlda w javie już niekoniecznie.
@leoha: po 1: koszt samej iteracji vs operacje tam zazwyczaj sprawia że różnica jest niewidoczna
po 2: java sobie sama zrobi unrolla a nawet czasem zwektoryzuje

@InformacjaNieprawdziwaCCCLVIII: fun fact: taki wyjątek potrafi pomóc, ale po 1: pętla musi być w #!$%@? duża, po 2: operacje w niej w #!$%@? proste, po 3: catch pusty, i jeszcze pewnie coś pomijam. Ale no, nie warto w 99.9999% przypadków.
@leoha: Instrukcja LOOP jest wolniejsza niż napisanie tego samego przy użyciu kilku instrukcji, a współczesne kompilatory jej nie emitują. Ostatni procesor, na jakim opłacało się użyć LOOP, to Intel 286.
Jeśli zaś chodzi o liczenie w górę lub w dół jako takie, to kompilator sam to zmieni, jeśli uzna, że jest to poprawne i opłacalne.
@Blackhorn: Ktoś popłynął mocno xD Benchmark w debugu na pewno dawał "oczekiwany" wynik.

Niemniej... jest jeden przykład podobnej optymalizacji, która do niedawna nie była wspierana przez kompilator - kolejność iteracji w wielowymiarowych tablicach.

Czyli:

int foo[10][10];

for (int i=0; i<10; ++i) {
for (int j=0; j<10; ++j) {
int val = foo[i][j]; // dobrze!
// int val = foo[j][i]; źle :(
}
}

A to przez cache-friendly data access. Skakanie po