-
-
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