Wydajność w języku Java
Czas trwania szkolenia:5 dni (40h)
Kod kursu:J/ADV
Poziom zaawansowania:
O szkoleniu Wydajność 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
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
- Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
- Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
- Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how
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
- Opcje podglądu GC
- Rodzaje GC: Serial, Parallel, Concurrent, G1, ZGC, Epsilon, Shenandoah
- Wybór, działanie i tuning GC
- Zing jako płatna alternatywa bez pauz
Maszyna wirtualna Javy
- Podstawowe tryby pracy
- JIT: kompilacje, podgląd, kontrola, strojenie
- Wyjątki a wydajność
- Parametry tuningowania JVM
- Podgląd parametrów programu
- Przegląd wybranych macrobenchmarków: JBB2015, VolanoMark
- Usprawnienia w Java
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ą