Mentionsy

Podcast Stacja IT
Podcast Stacja IT
06.12.2024 10:49

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

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

Rozdziały (12)

1. Wprowadzenie i osoba rozmówcy

Podstawowe informacje o rozmówcach i tematyka rozmowy.

2. Osobisty doświadczenie Mateusza Kamińskiego z Javą

Mateusz opisuje swoje doświadczenie z Javą i jej rozwój w ostatnich latach.

3. Nowości w języku Java i ich wpływ na wydajność

Rozmowa na temat zmian w wirtualnej maszynie Java (JVM) i ich wpływ na wydajność.

4. Garbage Collector i kompilacja do kodu natywnego

Szczegóły dotyczące garbage collectorów i kompilacji do kodu natywnego w JVM.

5. Funkcyjne elementy w języku Java i ich wpływy

Mateusz opisuje wprowadzone w Java 8 funkcje funkcyjne i ich wpływ na wydajność.

6. Nowe funkcje w JDK i zmiany w paradygramaty

Rozmowa na temat nowych funkcji w JDK i zmian w paradygramaty programowania w Java.

7. Wydajność w zastosowaniach i migracja na nowsze wersje Javy

Mateusz omawia zastosowania, w których Java może być niewydajna, oraz migrację na nowsze wersje Javy.

8. Konkluzje i przyszłość Java

Podsumowanie i perspektywy rozwoju języka Java.

9. Optymalizacja kodu i wydajność garbage collectora

Rozmowa skupia się na optymalizacji kodu w Javie, profilowaniu i wyborze odpowiedniego garbage collectora w zależności od specyfiki aplikacji.

10. Optymalizacja JVM i alternatywne wersje Javy

Rozmowa o różnych opcjach optymalizacji JVM, takich jak CRAC, GraalVM, oraz alternatywne wersje Javy, takie jak Torneido VM.

11. Języki programowania obok Java

Porównanie Clojure, Groovy i Kotlin, w tym ich zalety i wady, z podkreśleniem stabilności i wydajności Java.

12. Podsumowanie i zaproszenie do kolejnej rozmowy

Podsumowanie rozmowy i zaproszenie do kolejnej rozmowy na temat nowych funkcji Javy.

Szukaj w treści odcinka

Znaleziono 40 wyników dla "Java"

No więc ogólnie u mnie sytuacja wygląda tak, że od ponad już 10 lat mam do czynienia z Javą, albo z językami wokół Javy, czyli czy to Scala, czy Kotlin, czy kiedyś był Groovy, albo Clojure, ale ogólnie wciąż właśnie ciekawą rzeczą jest to, że ta Java zawsze zostaje gdzieś na przodzie, więc tak, tutaj u mnie tak wygląda.

Jakby takim głównym motywem tej rozmowy, no to ma być właśnie Java versus ten cały hype, który jest wokół jakichś innych języków.

Natomiast ta Java gdzieś tam cały czas w tle jest od wielu lat.

No to Java właśnie wbrew pozorom, mimo że już ma 25 lat, ponieważ właśnie ogólnie rok 1995 to początek Javy, wtedy wyszła pierwsza wersja.

No i teraz widzimy, że w ostatnich latach mamy duży rozwój, w sensie był taki czas, kiedy była Java 8 mniej więcej, kiedy powiedzmy trochę to przystopowało, nie wychodziły nowe wersje Javy przez dłuższy czas.

W sensie Java, bazując być może na takim języku jak Groovy, jak Scala, wybiera z nich najlepsze rzeczy i je standaryzuje właśnie w obrębie Java.

Dlaczego Java?

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

I to oznacza, że w trakcie jak nasza aplikacja działa, Java cały czas bada, ile razy pewne metody się wykonują.

Tutaj, co ciekawe, interfejsy w Java zostały rozwinięte, że możemy mieć oczywiście domyślne metody, czyli metody z jakąś implementacją.

Takie już ciekawostki można by powiedzieć, ale wbrew pozorom to pewnie jest odpowiedź na wymagania dzisiejszego właśnie świata, więc Java nadal jakby się rozwija.

Tylko właśnie bardziej funkcyjne switche, gdzie możemy rozebrać na pierwsze części taki rekord, o którym mówiłem już i od razu się dostać do pojedynczych pól, czyli to jest tak zwany, w Javascriptie to nazywają destrukturyzacją.

Więc ostatecznie oni się zdecydowali na wycofanie, co ciekawe, tej zmiany i ma wyjść jakaś nowa propozycja chyba w Java 25.

A oprócz tego tutaj też warto powiedzieć o tym, że Java od samego początku jest wielowątkowa, czyli tutaj bardzo łatwo możemy doprowadzić do tego, że nasz system

Ja o tym mówię na szkoleniach, propaguję to nowość, ponieważ to jest bardzo ważne, ponieważ trzeba zakładać, że Java jest używana głównie do tworzenia systemów, które muszą

To sama Java wewnętrznie jakby ogarnia i tego może być miliony, podczas gdy tak naprawdę tych standardowych wątków to powiedzmy aplikacja nie powinna zwykle przekraczać tysięcy, ale to już nawet przy wielkich aplikacjach, a zwykle powiedzmy zostajemy na poziomie do stu.

Czy to jest tak, że większość zatrzymała się na tym poziomie Java 8 i w ten sposób programuje?

Java 8 właśnie wprowadziła funkcyjność i myślę, że obecnie jest to standardem.

Ja pamiętam w 2015 roku tak naprawdę wychodziła Java 8, zaczęła być stosowana powiedzmy w praktyce.

I tutaj znowu trzeba wrócić do tego, że Java właśnie jest standardem, w sensie zmiany, które zachodzą są wstecznie kompatybilne, czyli tak naprawdę jak mamy coś, co jest napisane nawet w Javie pierwszej, to tak naprawdę to nadal jest skompilowalne

Wróćmy może do kwestii wydajności, bo trochę powiedzieliśmy o zmianach w języku, ale jakby wracając do tego głównego wątku, czy jest rzeczywiście jakiś taki obszar zastosowań, w których Java z założenia będzie niewydajna, albo jakieś takie...

Jeżeli mamy restrykcje na wykonanie czasowe pewnych funkcji systemu, czyli to są tak zwane systemy czasu rzeczywistego, to wtedy na pewno Java tutaj nie powinna być używana.

To wtedy zakładamy, że Java nigdy nie zatrzyma się, żeby coś tam odśmiecić z tej pamięci.

I to jest projekt, który dopiero jest w trakcie rozwoju, więc być może za rok, za dwa byśmy się spotkali, byśmy mogli wtedy porozmawiać, że jednak to, o czym ja teraz mówię, już jest nieprawda, ponieważ możemy na karcie graficznej przy pomocy Java również programować rzeczy.

Natomiast możemy oczywiście weryfikować, czy wirtualna maszyna Java, czy ten JIT potrafi skompilować nasz kod.

Metoda w Java nie powinna przekraczać 10 linii kodu, ale myślę, że obecnie to już nie jest prawda.

Kiedyś w poprzednich wersjach powiedzmy przed Java 8 to nie było w ramach sterty tylko to się działo poza stertą, można było tym zarządzać.

Obecnie od Java 11 mamy już właśnie inny standard dostępny i to są tak zwane asynchroniczne profilery.

No i najłatwiej z tego skorzystać przy pomocy Java Mission Control.

Pierwsza wersja, która już zaczęła to wspierać to była Java 8, ale tam jeszcze nie było to na tyle rozwinięte, jak właśnie zostało to rozwinięte od Javy 11.

A tu jeszcze powiem, że jest taka ciekawostka, dlaczego warto przejść Java 8 i wzwyż, ponieważ w ogóle ciągi znaków zostały zoptymalizowane pod względem tego, że obecnie już nie są definiowane przez tablice typu char czy char, jak kto woli.

Jeżeli przesadzimy znowu, no to Java to zauważy, w sensie ten garbage collector to zauważy, no i nie będzie odśmiecał pamięci, bo w sumie po co ma to robić, skoro jeszcze wolnego jest, nie wiem, 60% tego

Czyli nawet Microsoft, który walczył powiedzmy z Java, obecnie wypuszcza swoją własną wersję wirtualnej maszyny Java, bo co ciekawe na poziomie powiedzmy kodu zwykle to się niczym nie różni, ale o tym może za chwilę powiemy.

Natomiast tutaj jeszcze warto w takim razie rozszerzyć to, że czasami możemy wybrać inną wirtualną maszynę Java, żeby mieć

Czyli na przykład uruchamia się tam kilka minut, bo nawet nie chodzi o to, że sama Java wtedy się uruchamia kilka minut, tylko inicjalizacja wszystkich rzeczy tyle zajmuje.

To jest też taka alternatywna wirtualna maszyna Java, tylko tu się koncentrujemy na tym, że od razu cały kod w Javie sprowadzamy do kodu natywnego.

I co ciekawe, nie był aż tak statycznie kompilowany jak Java, chociaż obecnie Java też już nie jest, bo możemy na przykład stosować Wary w ramach funkcji.

Ma wiele takich funkcyjnych gotowców, które bardzo sprawnie pozwalają przeprocesować dane, więc w tym miejscu skala pewnie jest ok, chociaż trzeba powiedzieć, że Java właśnie coraz więcej rzeczy przejmuje ze skali też,

Skala jest pod tym względem podobna i właśnie dlatego dla mnie Java, mimo że przez pewien czas odstawała, jeżeli chodzi o te aspekty dotyczące Syntax Sugar, to obecnie już to nadrobili.

Oczywiście ja tu nie mówię o świecie Androida, bo tam Kotlin jest podstawą, ale to wynika z polityki, że Google się pokłócił z Oracle, a nie z tego, że, nie wiem, Java tam nie mogła dalej być stosowana.