Wydajność w języku Java
LICZBA DNI: 5 (40h)
KOD KURSU: J/ADV
Weź udział w szkoleniu
Termin
Lokalizacja
Trener
Cena / os
19
kwietnia
Warszawa,
Kraków,
14
czerwca
Warszawa,
Gdańsk,
9
sierpnia
Warszawa,
Łódź,
18
października
Warszawa,
Wrocław,
Poznań,
Termin
19
kwietnia
Lokalizacja
Warszawa,
Kraków,
Trener
Cena / os
Termin
14
czerwca
Lokalizacja
Warszawa,
Gdańsk,
Trener
Cena / os
Termin
9
sierpnia
Lokalizacja
Warszawa,
Łódź,
Trener
Cena / os
Termin
18
października
Lokalizacja
Warszawa,
Wrocław,
Poznań,
Trener
Cena / os
Powiadom
o kolejnych terminach
O szkoleniu
DLA KOGO?
Programiści chcący poznać sekrety tworzenia wydajnego programowania w języku Java
WYMAGANIA
Umiejętność programowania w języku Java
ZALETY
Szkolenie skupia się na aspektach wydajnościowych niezależnych od dobranych bibliotek, kontenerów czy frameworków, dzięki czemu poznana wiedza i zdobyte doświadczenie można wykorzystać w dowolnych aplikacjach Java
Cele szkolenia
Obycie się z praktykami tworzenia wydajnego oprogramowania w Java
Badanie wydajności z użyciem benchmarków
Wykorzystanie narzędzi do profilowania i monitorowania
Tuningowanie JVM (w tym Garbage Collector)
Program
Tworzenie wydajnego oprogramowania
- Różne wymiary wydajności
- Proces tworzenia wydajnego oprogramowania
- Co wpływa na wydajność w Javie
Pomiary wydajności
- Problemy ze zwiększaniem wydajności
- Micro i macrobenchmarking
- Profilowanie aplikacji
- Przegląd narzędzi do profilowania i monitorowania
- Użycie wybranych narzędzi (JConsole, VisualVM, JMC, MAT)
Wydajna praca z plikami
- Strumienie - jak zepsuć i jak naprawić
- Swobodny dostęp i inne sztuczki
- Kanały i bufory (NIO)
- Odwzorowywanie plików w pamięci (NIO)
- Optymalizacja Serializacji
- Przegląd funkcjonalny NIO2
- Przegląd rozwiązań dla XML
Algorytm wydajności
- Złożoność obliczeniowa
- Sztuka doboru rozwiązania
- Rekurencja a iteracja
- Nie tylko algorytm się liczy
Kolekcje i tablice
- API kolekcji z wysoka
- Porównanie, dobór, konfiguracja i poprawne użycie: zbiorów, list, kolejek, map
- Stare kontenery, czyli czego i czemu unikać
- Widoki kolekcji
- Klasa pomocnicza Collections
- Przegląd kolekcji wielowątkowych (java.util.concurrent)
- Tablice - wady i zalety
- Klasa pomocnicza Arrays
- Kolekcje na typach prostych - przegląd bibliotek
JMH - microbenchmark Framework
- Wstęp do JMH
- Tworzenie benchmarków
- Uruchomienie i wyniki
- Konfiguracja benchmarków
- Wsparcie wielowątkowości
- Benchmarki parametryzowalne
- Blackhole i poprawne pętle
- Pułapki, profilery i inne tematy zaawansowane
Zarządzanie pamięcią
- Jak działa odśmiecanie pamięci
- Co gwarantuje Garbage Collector?
- Cykl życia obiektu
- Referencje soft, weak i phantom
- Wycieki pamięci w Javie - powody i unikanie
- Złe praktyki przy Garbage Collector
- Ograniczanie zajętości pamięci
- Słaba teoria generacji, czyli skąd minor i major collections
- Obszary pamięci: young, eden, survival spaces, old/tenured, metaspace
- Wymiarowanie pamięci - parametry tuningowania
- Opcje podglądu GC
- Wybór, działanie i tuning GC
- Serial, Parallel, Concurrent, G1, ZGC, Epsilon, Shenandoah
- Inne opcje strojenia pamięci
- Zmiany w najnowszych maszynach Java
- Zing jako płatna alternatywa bez pauz
Maszyna wirtualna Javy
- Podstawowe tryby pracy a wydajność
- Parametry tuningowania JVM
- Porównywanie wydajności różnych JVM
- Przegląd wybranych macrobenchmarków: JBB2015, VolanoMark
- Usprawnienia w Java
Optymalizacja a HTTP (opcjonalne)
- Kłopoty z optymalizacją serwerów
- Przegląd przydatnych narzędzi i bibliotek
- HttpUnit, JWebUnit, Grinder, Apache JMeter
- Pokaz możliwości Apache JMeter
Problemy z optymalizacją
- Optymalizacje kompilatora a microbenchmark
- Microbenchmark a GC
- Uruchamianie wielu aplikacji
- Przyzwyczajenia programistów
- Optymalizacja za kompilator
- Przedwczesna optymalizacja
- Antywzorze związane z wydajnością
