Course Code: jvmtuning
Duration: 21 hours
Prerequisites:

Overview:

Course Outline:

Definicja wydajności i jej optymalizacji
* Czym jest wydajność - teoria i praktyka
* Omówienie ośmiu wymiarów wydajności
* Strojenie wydajności jest napędzane eksperymentami
* SDLC dla tworzenia wydajnego oprogramowania
* JMX i narzędzie JConsole
* Podstawy czytania wykresów wydajności

Podstawy maszyny wirtualnej JVM
* Kompilacja i mechanizma ładowania klas
* Wykonywanie pseudokodu
* Maszyna hot-spot i kompilator JIT
* Używanie VisualVM

Sprzęt i systemy operacyjne
* Pamięć operacyjna i podręczna
* Zarządznie pamięcią w systemie operacyjnym
* Funkcjonalności optymalizacyjne procesorów
* Scheduler i przełączanie kontekstów
* Wpływ kontenerów Docker

Dobre i złe sposoby na testowanie wydajności
* Typy testów wydajności
* Dobre praktyki testowania
* Antywzorce w testowaniu wydajności
* Jak unikać błędów poznawczych

Micro benchmarking
* Kiedy warto?
* Wstęp do Java Microbenchmark Harness
* Praca z projektem JMH
* Benchmarki współbieżne i parametryzowalne
* Pułapki i zaawansowane elementy JMH

Zarządzanie pamięcią JVM
* Garbage Collector i cykl życia obiektu
* Referencje silne, soft, weak i phantom
* Generacje i obszary pamięci
* Użycie Eclipse Memory Analyzer (MAT)
 
Garbage collector - działanie i optymalizacja
* Działanie algorytmu Mark and Sweep
* Obiekty i GC w środowisku HotSpot
* GC równoległy
* Teoria współbieżnego zwalniania pamięci
* Omówienie CMS
* Omówienie G1
* Logowanie G/C
* Narzędzia do przeglądania logów GC
* Podstawy strojenia GC
    * Allokacje
    * Czas przestoju
    * Wątki i korzenie GC
    * Strojenie równoległego GC
    * Strojenie CMS
    * Strojenie G1

Wykonywanie kodu na JVM
* Bajtkod JVM
* Prosty interpreter vs. HotSpot
* Kompilacja AOT vs. JIT

Kompilator JIT
* Podstawy JIT
* Wprowadzenie do JITWatch
* Kompilacja JIT
* Mechanizm wstawania kodu
* Rozwijanie pętli
* Technika Escape analysis
* Inne właściwości optymalizacji JIT
* Pisanie kodu "przyjaznego" JIT

Wydajność użycia typów danych Java
* Optymalizacje typów List
* Optymalizacje typów Map
* Optymalizacje typów Set
* Przegląd kolekcji wielowątkowych (java.util.concurrent)

Wydajność współbieżna
* Synchronizacja w wydajność
* Software Transaction Memory
* Programowanie reaktywne
* Kotlin i coroutines

Wydajność z nowym API Java
* Praca na strumieniach
* Praca ze stosem
* Metody typu Factory w kolekcjach
* Użycie CompletableFuture i programowania asynchronicznego

Narzędzia do profilowania
* Standardowe (Visual VM, Java Mission Control, JProfiler)
* Oparte na aspektach i agentach
* Typu APM