Szkolenie: Wydajność aplikacji na platformie Java
Podczas szkolenia "Wydajność aplikacji na platformie Java" uczestnicy zajmą się badaniem wydajności i wytwarzaniem wysokowydajnych aplikacji działających na platformie Java z uwzględnieniem technik narzędzi dostępnych w najnowszych wersjach języka Java.
- Trenerzy praktycy
- Kameralne grupy
Czas trwania szkolenia:4 dni (32h)
Kod kursu:J/EFF
Wydajność aplikacji na platformie Java
Cele szkolenia
Poznanie możliwości testowania wydajności i strojenia aplikacji opierających się na Wirtualnej Maszynie Javy
Nabycie umiejętności tworzenia wydajnego kodu w Javie z uwzględnieniem nowości wprowadzanych do języka przez ostatnie lata
Poznanie niuansów języka Java mających wpływ na optymalizacje działania aplikacji
Omówienie i praktyczne przetestowanie wpływu zastosowanych rozwiązań na wydajność napisanego kodu zarówno na poziomie programistycznym, jak i architektonicznym
Dla kogo?
Osób, które chcą poznać możliwości badania wydajności i strojenia aplikacji działających na Wirtualnej Maszynie Javy oraz zasad programowania w języku Java i aspektów dot. architektury wdrażanej aplikacji, które pozwolą na osiągnięcie wysokiej wydajności docelowego rozwiązania.
Zalety
Przekrojowe omówienie zagadnień oraz przykłady oparte o życiowe problemy
Promowanie obowiązujących konwencji i dobrych praktyk programistycznych w celu osiągania wysokiej wydajności napisanego kodu
Minimalna teoria oparta na praktycznych przykładach i warsztatach z naciskiem na badanie wydajności rozwiązań
Praktyczna wiedza uwzględniająca zmiany wprowadzone w najnowszych wydaniach Javy oraz Wirtualnej Maszyny Javy
Wymagania
Podstawowa umiejętność programowania w języku Java
W cenie otrzymasz:
Materiały szkoleniowe
Certyfikat ukończenia szkolenia
W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Program szkolenia
Testowanie wydajności
Poziomy testów wydajnościowych
Problemy związane z poprawnym testowaniem wydajnościowym aplikacji
Zasady tworzenia i utrzymywania testów wydajnościowych
Testy białej skrzynki - Java Microbenchmark Harness
Testy czarnej skrzynki - Gatling
Interpretacja wyników testów
Narzędzia profilujące
Podstawowe narzędzia JDK: jps / jinfo / jmap / jconsole / jstack / jcmd
Java Flight Recorder
Intellij Debugger & (Async) Profiler
VisualVM / Java Mission Control
Zbieranie metryk z produkcyjnie działających aplikacji
Just-In-Time Compiler
Zasady działania JIT i wpływ na wydajność
Przydatne flagi do strojenia JIT
OpenJ9 - alternatywny JVM z JIT Server
Porządkowanie pamięci w Wirtualnej Maszynie Javy
Podstawy działania mechanizmu odśmiecania pamięci
Porównanie dostępnych GC w najnowszych JVM: Serial, Parallel, G1GC, ZGC, Shenandoah, Epsilon
Heap Memory vs No-Heap Memory
Powody pojawienia się błędu związanego z brakiem pamięci
Wyciek vs Brak pamięci
Kompresja wskaźników na obiekty
Application Class-Data Sharing - mechanizm Class Data Sharing
Przydatne flagi do strojenia Garbage Collectora
Typy podstawowe w Javie i ich wpływ na wydajność
Typy prymitywne vs typy opakowane
Integer cache
Pule ciągów znaków / String.intern
Typowe błędy w operacjach na Stringach
Deduplikacja Stringów / Compact Strings
Metody programistyczne poprawiające wydajność aplikacji
Problemy związane z metodami equals, hashCode, toString
Wyjątki vs programowanie defensywne
Wydajne używanie pakietu NIO
Leniwe przetwarzanie
Cache / Memoization
Pule obiektów
Wzorce projektowe wspomagające pisanie wydajnych aplikacji
Wołanie natywnych aplikacji z wykorzystaniem Process API oraz Foreign Linker API
Wydajność w aspekcie wielowątkowości
Java Memory Model
Cechy dostępnych pul wątków
Unikanie synchronizacji danych
Synchronizacja zmiennych w przetwarzaniu wielowątkowym (typy atomowe, LongAdder)
Stosowanie złożonych obiektów synchronizujących z pakietu java.util.concurrent
Dobór kolekcji wielowątkowych do problemu
Pułapki w użyciu java.util.Random
Vector API jako alternatywa dla bezpośredniego paralelizmu
Wirtualne wątki i Structured Concurrency
Realizacja złożonych obliczeń na kartach graficznych z wykorzystaniem TornadoVM
Aspekty architektury w wydajności aplikacji
Wpływ systemu operacyjnego na JVM i dobór odpowiedniego rozwiązania na przykładzie Alpaquita Linux
Mikroserwisowość i konteneryzacja JVM
JPMS i budowanie własnych obrazych JVM
Optymalizacja serializacji obiektów
Asynchroniczna komunikacja między serwisami
Zagadnienia wydajnościowe w warstwie persystencji
Platforma GraalVM / Coordinated Restore at Checkpoint (CRaC)
Problemy we wdrażaniu aplikacji opartych na Wirutalnej Maszynie Javy
Omówienie platformy GraalVM
Budowanie natywnych aplikacji Java w GraalVM
Polyglot API (inne języki programowania w ramach JVM)
Coordinated Restore at Checkpoint (CRaC) - alternatywa dla natywnej aplikacji