Wpis z mikrobloga

@Blackhorn: dramat #!$%@? dramat... najgorzej jak ktoś to zapamięta i później w pracy nie da sobie przegadać:/

Był tu już taki co zawsze jak miał mnożenie w kodzie razy 2 to bity przesuwał bo po co pisać mniej wydajny kod i za #!$%@? sobie nie dał przegadać że robi źle. Jeszcze się tym chwalił i był z tego dumny.

Pkt 1 jako jedyny ma jeszcze rację bytu, gdy wynik metody size()
@Blackhorn: przecież to wszystko kompilator sobie sam zatenteguje lol

może jeszcze niech przy pętlach mniejszych niż 5 wypisują cały kod z palca a pętle wyrzucą bo to jeden cmp/je/jmp mniej będzie ( ͡° ͜ʖ ͡°)
@Blackhorn: o borze, moje oczy.

Przecież 1-3 i tak ostatecznie zostaną rozwinięte i po uruchomieniu kodu nie będzie tam żadnej pętli, a 4 to żart a nie kod. Ktoś tam słyszał na tych studiach o wielowatkowości? Co, jak w drugim wątku ktoś będzie dopisywać dane do tej tablicy?

Trick xD
A już ten ostatni "trik" to po prostu esencja polskiej myśli informatycznej


@InformacjaNieprawdziwaCCCLVIII:

Ale to akurat prawda, bo porównanie z zerem jest szybsze. Problem tego obrazka jest taki, że są to to tzw. "premature optimizations". W teorii przyspieszają kod, ale w praktyce są bez znaczenia - no chyba, że piszemy jakiś algorytm, który na prawdę mocno opiera się na takich pętlach i każda, nawet najmniejsza optymalizacja się liczy.
@Blackhorn: trzeba było jeszcze wspomnieć, że prowadzący sam podchodził do tego z dużą dozą dystansu i podkreślał, że niektóre rzeczy z tego slajdu już są nieaktualne lub załatwiane za programistę przez kompilator.
Jeżeli chodzi o ostatni przykład z try..catch, to pokazał to tylko jako ciekawostkę i mówił, żeby za żadne skarby czegoś takiego nie robić.
Rozumiem heheszki, ale strasznie mnie #!$%@? jak co roku ktoś ciśnie bekę z tego slajdu hurrrr
@leoha w javie nigdy nie robi się loop unrollingu bo mamy JIT który jako pierwsze 2 operacje w gorących miejscach robi inlinowanie metod i unrollowanie pętli :)
Nie daje nic (kompilator Javy sam jest w stanie zrobić tę optymalizację)


@InformacjaNieprawdziwaCCCLVIII: Kompilator Javy nie robi praktycznie żadnych optymalizacji. Dopiero JIT kompiluje i odpala optymalizacje. Przy małej pętli nawet nie będzie się próbował odpalić.

Bardzo łatwo uczyni kod nieczytelnym, podczas gdy wpływ na wydajność jest znikomy


(to chyba był komentarz do porady "Przenieść poza pętlę wyrażenia niezależne od jej przebiegu")

Ta porada ma akurat sporo sensu, nie dlatego, że to
@Blackhorn To jest masakra że nauczyciele zatrzymali się na czasach gdzie trzeba było oszczędzać milisekundy (teraz to samo wykonanie zajmuje pewnie mikro/nano)

Zamiast skupić się na obecnych technikach optymalizacji, jakimi może być niemutowalnosc, batchowanie, nie odpytywanie zewnętrznych serwisów w petlach, cashowanie, TLS offloading i wiele innych to oni rozwiązują problemy dawno rozwiązane przez kompilatory i JITy xdd
jaka jest roznica w iterowaniu do 0, a do N?

@ni0bi: pewnie chodzi o to, że na x86 jest instrukcja loop, która decrementuje ecx i skacze jeśli nie jest zerem i domniemywa się, że jvm pod spodem tak będie robić (czyli masz petlę w jednej instrukcji)


@leoha: Nie tylko x86.
Zaletę iterowania do 0 jest dość łatwo wytłumaczyć jak ktoś zna jako-tako assemblera i architektury procesorów. Pętla na poziomie assemblera