Mentionsy Mentionsy
Podcast Stacja IT
Podcast Stacja IT

Stacja.IT Podcast 057 Mateusz Kamiński - Czy Java może być wydajna?

06.12.2024 ·1 godz 0 min · 12 rozdziałów

W nowym odcinku podcastu Stacji.IT rozmawiamy o języku Java, który jest jednym z najpopularniejszych języków programowania. Gościem odcinka jest Mateusz Kamiński - Head of Product Team & Technology Evangelist w Sages. Podczas naszej dyskusji poruszamy następujące tematy: Jakie zagadnienia najbardziej Cię interesują w IT? Dlaczego programujesz w Javie? Kiedy Java jest wydajna, a kiedy nie? W jaki sposób można optymalizować działanie aplikacji w Javie? Czy są do tego jakieś narzędzia, biblioteki, dobre praktyki? Czy kolejne wersje Javy są szybsze / bardziej efektywne? Jakie są najważniejsze zmiany w Javie od wersji 8 od strony programisty? Czy Java nadal szybko się zmienia? Kiedy warto skorzystać z innych języków programowania działających w ramach JVM? Jakie są najczęstsze błędy popełniane przez programistów JVM?   Zapraszamy do oglądania i subskrybowania naszego kanału, aby być na bieżąco z najnowszymi odcinkami!    ________________________________________________________ Posłuchaj rozmów z prowadzącymi na Stacji i dowiedz się, jakie są ciekawe trendy w IT, jaką ścieżkę rozwoju wybrać i jakimi tematami warto się zainteresować. Rozmawiamy o programowaniu, data science i budowaniu własnej kariery w IT. 😉 🌏 Więcej o nas przeczytasz na stronie: www.stacja.it

7:17 · Garbage Collector i kompilacja do kodu natywnego 2

Czy to są te główne elementy, czy o czymś tutaj jeszcze należałoby wspomnieć, jakby o tych głównych kategoriach, na które trzeba popatrzeć, żeby się zastanowić, czy moja aplikacja jest wydajna, czy nie. Tutaj możemy podzielić JVM-a na takie dwie sfery. Pierwsza dotyczy odśmiecania pamięci, a druga kompilacji do kodu natywnego przez JIT-a. Właśnie jak ja zaczynałem w ogóle pracować przy Javie, to niestety wiele źródeł mówiło o tym, że Java to jest interpretowany język, co ciekawe, a to jest absolutnie Nieprawda, ponieważ już od dawien dawna, tak naprawdę od wersji 1.1 wprowadzono JITA, czyli Just In Time Compiler.

Natomiast o ten aspekt kompilacji do kodu natywnego to wystarczy, że zadbamy o to, że nasz kod będzie dobrze napisany. Po prostu będziemy dbali o czystość kodu. Bo im mniejsze są te metody w klasach, im klasy mają mniej metod, czyli tak jakby to jest dobrze zorganizowane, tym ten JIT ma łatwiej to zoptymalizować. Więc to jest taki ciekawy aspekt, bo tutaj też powiem, że spotykałem się z takimi, nie wiem, sugestiami, że po co tam na to jakoś bardzo zwracać uwagę, w sensie komputer, procesor wszystko przyjmie i wykona. No nie do końca tak jak widać jest. Ponieważ nawet sam styl kodu ma znaczenie dla jakości potem i wydajności działania.

25:14 · Optymalizacja kodu i wydajność garbage collectora 2

To czy coś tutaj można powiedzieć, zaczynając od samego programowania, o takich dobrych praktykach, które powodują, że dzięki temu dobrze współpracujemy z tą maszyną wirtualną, z tym garbage collectorem. Wspomniałeś przez chwilę o tym, żeby funkcje przez nas tworzone były niezbyt długie, żeby ten Just-In-Time Compiler sobie z tym poradził. Czy tutaj możemy powiedzieć więcej, jak to wygląda? Krótkie to znaczy jak to mniej więcej należy rozumieć. To nie jest proste, ponieważ właśnie to co my widzimy jako krótkie w kodzie maszynowym może zajmować miliony linii kodu. Natomiast możemy oczywiście weryfikować, czy wirtualna maszyna Java, czy ten JIT potrafi skompilować nasz kod.

Natomiast jeżeli coś ciągle musi być wykonywane, to ostatecznie dojdzie do tego ostatniego poziomu. No i teraz... Ta kompilacja dzieje się na dodatkowych wątkach. W ogóle, jak my startujemy proces w Javie, to funkcja main to jest tylko jeden z wielu wątków, które startują razem z wirtualną maszyną Javy, bo mamy tam oczywiście wątki dotyczące odśmiecania pamięci, ale też właśnie te, które dotyczą JITA. No i właśnie to wygląda tak, że jak jakaś metoda się skompiluje, to natrafia do takiego cache'a na ten kod natywny i dostęp do tego cache'a jest zapewniony bardzo dobrze, ponieważ siedzi wszystko w pamięci RAM, ale jest to dosyć nieduży obszar, który można poszerzyć, jeżeli nasza aplikacja właśnie jest takim ciężkim monolitem,

Pokazano wszystkie 4 dopasowania. Transkrypcja generowana automatycznie i niesprawdzana ręcznie — może zawierać błędy.