Wpis z mikrobloga

1790 + 1 = 1791

Tytuł: Wydajność Javy. Szczegółowe porady dotyczące programowania i strojenia aplikacji w Javie. Wydanie II
Autor: Scott Oaks
Gatunek: informatyka, matematyka
Ocena: ★★★★★★★

Był czas, gdy wyrażenie „wydajność Javy” funkcjonowało jako mem w branży programistycznej, ale na szczęście czasy się zmieniły i dzisiaj ten zwrot nikogo nie dziwi i znajduje się w tytule dobrej książki o programowaniu. Autor podszedł do zagadnienia bardzo poważnie, od naukowej strony, przez co w książce znajduje się mnóstwo testów i porównań różnych podejść do danego zagadnienia - istnieje szansa, że to pierwsza książka z jaką spotykasz się od czasu studiów, w której zostało znalezione zastosowanie dla testu t-Studenta. Język książki jest dosyć suchy, ale adekwatny do poruszanej treści, a jej czytanie mi się nie dłużyło, szczególnie że naszpikowana jest listingami, obrazami i tabelami. Środek ciężkości „Wydajności Javy” położony został na strojeniu maszyny wirtualnej Javy, co nie jest samo w sobie wadą, ale nieco żałuje, że proporcje nie są odwrócone, żeby kwestie API były dominujące.

Oczywiście, poprawa wydajności nie odbywa się na chybił trafił, dlatego podstawą jest identyfikacja miejsc, w których można uzyskać najlepsze wyniki, z tego względu dosyć szczegółowo zostały przedstawione testy wydajności oraz narzędzia profilujące JVM. W świecie programowania mamy odwieczny konflikt między pamięcią a procesorem – w danej aplikacji wydajność jednego można często usprawnić kosztem drugiego. Znaczna część obsługi pamięci w przypadku Javy odbywa się po stronie JVM, bo oczywiście mamy tu do czynienia z odśmiecaniem pamięci i sporo miejsca w książce poświęcono GC, powiedziałbym że wręcz za dużo, bo jest tu szczegółowy opis eksperymentalnych czy wycofanych GC, ale być może to jakiś konik autora. Kwestie JVM zajmują większość książki, bo mamy też szczegółowy opis kompilacji JIT czy analizy sterty, więc większość porad nie dotyczy dostrajania samego kodu Javy, a właśnie maszyny wirtualnej, co można osiągnąć uruchamiając JVM z proponowanymi przez autora flagami, z zastrzeżeniem, że często to domyślne wartości uważane są za najlepsze. Kilka ostatnich rozdziałów dotyczy samego kodu, w tym opisu API Javy i myślę, że wiele osób może znaleźć tam kilka smaczków, które sprawdzą się przy mikrooptymalizacjach. Pewnym moim standardowym zastrzeżeniem skierowanym do książek o Javie jest to, że udają one, że ktoś programuje w czystej Javie bez udziału frameworków – tutaj co prawda autor poświęcił Springowi jeden mały podrozdział, ale moim znaniem jest to dalej za mało.

Książka kierowana jest do „inżynierów i programistów”, ale sam bardziej poleciłbym ją programistom i DevOpsom – nie tylko samej Javy, ale po prostu korzystających z JVM. Poziom zaawansowania oceniłbym na średnio zaawansowany z pewnymi zaawansowanymi fragmentami, dlatego jeśli ktoś chce wejść na „wyższy poziom”, to z pewnością może sięgnąć po tę pozycję.

Wpis dodany za pomocą tego skryptu

#bookmeter #readdev #ksiazki #programowanie #naukaprogramowania #czytajzwykopem #informatykabookmeter #matematykabookmeter
nightmaar - 1790 + 1 = 1791

Tytuł: Wydajność Javy. Szczegółowe porady dotyczące prog...

źródło: comment_16563186808ZBq6w4UHIdn83Axy2kctv.jpg

Pobierz
  • 14
Informacje nt. książki z tagu #bookmeter:

Średnia ocena z Wykopu: ★★★★★★★ (7.0 / 10) (1 recenzji)
Następne podsumowanie tagu: 2022-07-01 00:00 tag z historią podsumowań »
Kategoria książki: informatyka, internet
Liczba stron książki: 384

Jesteś pierwszym recenzentem tej książki tutaj :)

Podobne książki:
1\. Mistrz czystego kodu. Kodeks postępowania profesjonalnych pr... - najnowsza recenzja usera nightmaar ★★★ (5.0 / 10) - Wpis »
2\. Refaktoryzacja ulepszanie
Tl,dr: Jeśli coś ma być szybkie i lekkie to nie należy pisać tego w Javie.

"Wydajność Javy" to nadal aktualny mem. Java nadal jest powolna i ciężka, ale zwykłe komputery stały się tak potężne, że nie przeszkadza to tak jak kiedyś.
Tl,dr: Jeśli coś ma być szybkie i lekkie to nie należy pisać tego w Javie.


@Krolik: imo problem jest dużo bardziej skomplikowany, żeby tak spłycać. Sama platforma jest bardzo wydajna, jeśli piszemy kod jak w C i używamy samych tablic. W porównaniu do takiego C/C++ mamy za darmo LTO/PGO i kompilację pod konkretny procesor. Z drugiej strony sposób pisania programów i zaszłości (wszystko jest obiektem, każdy obiekt jest lockiem, generyki wymagające
Sama platforma jest bardzo wydajna, jeśli piszemy kod jak w C i używamy samych tablic.


@Saly: tylko jeśli ograniczać się do takiego małego podzbioru Javy, to dlaczego od razu nie pisać w C? C przy takim stylu pisania jest bardziej ergonomiczne i wysokopoziomowe - choćby dlatego że ma makra, wskaźniki, structy, czy typy unsigned. A wydajność C i tak będzie ostatecznie lepsza, bo kompilatory hotspot dostępne w popularnych jdk mają siłę
@przyjaciel_golomb:

powolna w porównaniu do c i cpp, ale jak porównasz ją do innych popularnych dzisiaj języków, to często jest znacznie szybsza (patrz języki dynamicznie typowane)


Po pierwsze nie każdy język dynamicznie typowany jest tak powolny jak Ruby i Python. Taki JS V8 ma szybkość zbliżoną do OpenJDK, a potrafi być nawet czasem szybszy.

Po drugie języki dynamicznie typowane powinno stosować się tam gdzie zależy nam na bardzo szybkim sprzężeniu zwrotnym
tylko jeśli ograniczać się do takiego małego podzbioru Javy, to dlaczego od razu nie pisać w C


@Krolik: o ile dobrze pamiętam to wybór Javy jako języka do HFTa był spowodowany wysoką wydajnością, dużo przyjemniejszymi narzędziami i exceptionami jako alternatywa do segfaultów i wywalenia aplikacji. Mała nisza, ale jednak
@Saly: Robisz milczące założenie, że Java jest głównym językiem do HFT i ktoś ją wybrał. Niby kto i skąd takie info że jest w ogóle dominującą? Tak jak pisałem wyżej, HFT to szeroka dziedzina gdzie używa się różnych technologii, od bardzo szybkich implementacji sprzętowych używających FPGA tam gdzie liczą się mikrosekundy, poprzez kod low-latency w C++/Rust używający stosów sieciowych w userspace, do mniej krytycznych wydajnościowo rzeczy w Java, a tam gdzie
Robisz milczące założenie, że Java jest głównym językiem do HFT i ktoś ją wybrał.


@Krolik: ale ja nie mówię, że to główny język tylko, że się go tam stosuje. Chyba każdy słyszał o HFT klepanym w javie i to w sumie tyle.