Wydajność aplikacji na platformie Java
Czas trwania szkolenia:3 dni (24h)
Kod kursu:J/EFF
Poziom zaawansowania:
O szkoleniu Wydajność aplikacji na platformie 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
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.
Wymagania
- Podstawowa umiejętność programowania w języku Java
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
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
Program
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
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
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