Szkolenie
J/ADV Tworzenie wydajnego oprogramowania w języku Java - techniki zaawansowane
O szkoleniu
Celem szkolenia jest obycie się z praktykami tworzenia wydajnego oprogramowania w Java, poprzez tworzenie benchmark'ów i badanie wydajności, profilowanie aplikacji, używanie struktur danych odpowiednich do trybu pracy, wydajny dostęp do plików i przede wszystkim obalenie błędnych mitów dotyczących pracy Garbage Collector'a. Wielu programistów Java posiadających nawet wieloletnie doświadczenie nie zdaje sobie sprawy z tego jakie grzechy popełnia próbując pomagać wirtualnej maszynie Java, czy Garbage Collector'owi, w rezultacie otrzymując efekt przeciwny do zamierzonego. To szkolenie obala te mity i uczy prawdziwych praktyk tworzenia wydajnego oprogramowania w Javie. A także jak zwiększyć wydajność aplikacji bez dotykania samego kodu, czyli profilowanie JVM i GC.
Uczestnik szkolenia uczy się również używania zaawansowanych elementów języka takich jak refleksja, introspekcja czy dynamiczne proxy.
Uczestnik szkolenia uczy się również używania zaawansowanych elementów języka takich jak refleksja, introspekcja czy dynamiczne proxy.
Kto powinien wziąć udział?
Szkolenie jest adresowane do programistów języka Java, którzy chcą poznać sekrety tworzenia wydajnego oprogramowania w tym języku.
Program szkolenia
I. Tworzenie wydajnego oprogramowania
1. Różne wymiary wydajności
a) Wydajność obliczeniowa
b) Wydajność pamięciowa (RAM footprint)
c) Wydajność uruchomienia
d) Wydajność skalowania
2. Wydajność a użytkownik - subiektywne odczucie wydajności
3. Proces tworzenia wydajnego oprogramowania
a) Analiza wydajności
b) Projektowanie a wydajność
c) Architektura a wydajność
d) Kodowanie a wydajność
e) Testowanie a wydajność
f) Profilowanie a wydajność
4. Co wpływa na wydajność w Javie
II. Pomiary wydajności
1. Problemy ze zwiększaniem wydajności
2. Co to jest Benchmarking
a) Sposoby dokonywania pomiarów
b) Zalety budowania benchmarków
c) Micro-benchmark
d) Macro-benchmark
e) Problemy wyników pomiarowania
3. Czym jest profilowanie aplikacji
a) Wpływ profilowania na wydajność
b) Problemy z płaskim profilowaniem
c) Zalety narzędzi do profilowania
d) Narzędzia do profilowania (Java 6)
- Problemy do zdiagnozowania
- Opis narzędzi
- Profilowanie w Eclipse
III. Wydajna praca z plikami
1. Strumienie
a) Podstawy
b) Analiza alternatywnych rozwiązań
c) Porównania wydajności rozwiązań na strumieniach
2. Swobodny dostęp do plików
3. Lepsza wydajność - bibliotek NIO
a) Kanały
- FileChannel
- ByteBuffer
- Przykłady użycia kanałów
- Porównanie wydajność rozwiązań
b) Odwzorowywanie plików w pamięci
c) Porównanie wydajności różnych metod dostępu do plików
4. Serializacja
a) Podstawy serializacji
b) Problemy z serializacją
c) Analiza wyników serializacji
d) Sposoby optymalizacji serializacji
IV. Algorytm wydajności
1. Sztuka doboru algorytmu
a) Porównanie algorytmów
b) Elegancja a brute-force
c) Dziedzina problemu a algorytm
2. Problemy z rekurencją
3. Nie tylko algorytm się liczy
V. Kolekcje i tablice
1. API kolekcji
a) Podstawowe interfejsy
- Iterator
- Iterable
- Collection
- Set
- List
- Queue
- Deque
- Map
b) Najważniejsze funkcje
2. Struktury danych - podstawy wydajnych operacji
a) Tablica laszująca
- Kontrakt między equals a hashCode
- Kontrakt equals
- Problemy z danymi w tablicy haszującej
b) Przeszukiwanie binarne
- Drzewa czerwono-czarne
*Opis zagadnienia
*Zasady działania
*Przykłady działania
3. Zbiory
a) Wydajność standardowych implementacji
- HashSet
- TreeSet
- LinkedHashSet
- EnumSet
b) Nowe interfejsy zbiorów (Java 6)
- NavigableSet
c) Optymalizacja pracy na zbiorach
d) Porównanie wydajności różnych implementacji przy różnych zadaniach
4. Listy
a) Wydajność standardowych implementacji
- ArrayList
- LinkedList
b) Optymalizacja pracy z listami
c) Porównanie wydajności list
d) Opis struktur ArrayList i LinkedList - wizualizacja złożoności operacji
e) Interfejs RandomAccess a wydajność przeglądania listy
5. Kolejki
a) Wydajność standardowych implementacji
- PriorityQueue
- LinkedList
b) Nowe API - kolejki dwustronne (Java 6)
- Interfejs Deque
- Wydajność implementacji kolejki dwustronnej
*LinkedList
*ArrayDeque
6. Mapy
a) Wydajność standardowych implementacji
- HashMap
- TreeMap
- EnumMap
- IdentityHashMap
- WeakHashMap
- LinkedHashMap
b) Nowe API map (Java6)
- NavigableMap
c) Optymalizacja pracy na mapach
d) Porównanie wydajności map
e) Jak stworzyć cache
7. Stare kontenery (Java 1.0 i 1.1)
a) Implementacje starych kontenerów
- Hashtable
- Vector
- Stack
- BitSet
b) Enymerator - Enymeration
c) Porównanie wydajności z nowymi implementacjami
8. Widok kolekcji
a) Zalety używania
b) Niebezpieczeństwa
c) Optymalizacja
9. Collections- klasa pomocnicza
a) Podstawowe funkcje
b) Rola w optymalizacji
c) Wykorzystanie w algorytmach
10. Wydajność a kolekcje odporne na wielowątkowość
a) Wydajność kolejek wielowątkowych
- ConcurrentLinkedQueue
b) Wydajność kolejek blokujących
- BlockingQueue
- ArrayBlockingQueue
- DelayQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- SynchronousQueue
c) Wydajność dwustronnych kolejek blokujących
- BlockingDeque
- LinkedBlockingDeque
d) Wydajność list wielowątkowych
- CopyOnWriteArrayList
e) Wydajność map wielowątkowych
- ConcurrentMap
- ConcurrentNavigableMap
- ConcurrentHashMap
- ConcurrentSkipListMap
11. Tablice
a) Zalety stosowania tablic
b) Wady stosowania tablic
c) Porównanie tablic z ArrayList
d) Klasa pomocnicza Arrays
VI. Kontrola ładowania klas
1. Ładowanie klas- proces
2. Klasa Class
3. ClassLoader- kiedy tworzyć?
4. Po co kontrolować ładowanie klas?
5. Zachłanne ładowanie klas
a) Jak działa zachłanne ładowanie klas
b) Przykład zachłannego ładowania klas
c) Kontrola zachłannego ładowania klas
6. Redukowanie ilości klas
a) Klasy wewnętrzne
b) Łączenie listenerów
c) Refleksja
d) Dynamiczne Proxy
7. Kiedy warto kontrolować ładowanie klas?
VII. Zarządzanie pamięcią
1. Java a zarządzanie pamięcią
a) Jak działa odśmiecanie pamięci (Garbage Collector)
b) Co gwarantuje Garbage Collector?
c) Cykl życia obiektu
- Fazy cyklu życia obiektu
- Wyspy obiektów
- Metoda finalize
- Problemy i pułapki
2. Typy referencji a Garbage Collector i proces odśmiecania
a) SoftReference
b) WeakReference
c) PhantomReference
3. Wycieki pamięci w Javie
a) Powody
b) Złe praktyki
c) Unikanie
4. Garbage Collector - złe praktyki
5. Ograniczanie zajętości pamięci
6. Opcje strojenia Garbage Collector'a
a) Parametry konfiguracyjne Garbage Collector'a
- Słaba teoria generacji - podstawa wydajnej pracy na obiektach
- Typy odśmiecania
*Minor Collections
*Major Collections
-Generacje obiektów
*Organizacja pamięci w Javie
*Młoda generacja
*Eden
*Survivor Space
*Stara generacja
*Pamięć permanentna
- Parametry wydajnościowe Garbage Collector
- Wymiarowanie pamięci (generacji)
b) Optymalizacja algorytmu odśmiecania dla konkretnej aplikacji na konkretnej platformie sprzętowej
c) Rodzaje GC
- Serial Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
- Parraler Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
- Concurent Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
d) Zalecenia przy wyborze GC
VIII. Maszyna wirtualna Javy
1. Podstawowe tryby pracy a wydajność
2. Parametry wydajnościowe JVM
3. Porównanie wydajności różnych wersji JVM (1.4, 5.x, 6.x)
a) Na poziomie różnych benchmarków
- JBB2000
- JBB2005
- VolanoMark 2.5
- I/O Benchmark Comparsion
- CMS Server Benchmark
b) Na poziomie różnych parametrów wydajnościowych
- Działanie po stronie serwera
- Startup
- RAM footprint
- Kopiowanie tablic
- Wydajność GC
- Operacje wejścia-wyjścia
IX. Problemy z optymalizacją
1. Optymalizacje kompilatora a micro-benchmark
2. Micro-benchmark a GC
3. Uruchamianie wielu aplikacji
4. Przyzwyczajenia programistów
5. Optymalizacja za kompilator
6. Przedwczesna optymalizacja
7. Antywzorze związane z wydajnością
a) Zachłanność
b) Pośpiech
c) Lenistwo
d) Ignorancja
1. Różne wymiary wydajności
a) Wydajność obliczeniowa
b) Wydajność pamięciowa (RAM footprint)
c) Wydajność uruchomienia
d) Wydajność skalowania
2. Wydajność a użytkownik - subiektywne odczucie wydajności
3. Proces tworzenia wydajnego oprogramowania
a) Analiza wydajności
b) Projektowanie a wydajność
c) Architektura a wydajność
d) Kodowanie a wydajność
e) Testowanie a wydajność
f) Profilowanie a wydajność
4. Co wpływa na wydajność w Javie
II. Pomiary wydajności
1. Problemy ze zwiększaniem wydajności
2. Co to jest Benchmarking
a) Sposoby dokonywania pomiarów
b) Zalety budowania benchmarków
c) Micro-benchmark
d) Macro-benchmark
e) Problemy wyników pomiarowania
3. Czym jest profilowanie aplikacji
a) Wpływ profilowania na wydajność
b) Problemy z płaskim profilowaniem
c) Zalety narzędzi do profilowania
d) Narzędzia do profilowania (Java 6)
- Problemy do zdiagnozowania
- Opis narzędzi
- Profilowanie w Eclipse
III. Wydajna praca z plikami
1. Strumienie
a) Podstawy
b) Analiza alternatywnych rozwiązań
c) Porównania wydajności rozwiązań na strumieniach
2. Swobodny dostęp do plików
3. Lepsza wydajność - bibliotek NIO
a) Kanały
- FileChannel
- ByteBuffer
- Przykłady użycia kanałów
- Porównanie wydajność rozwiązań
b) Odwzorowywanie plików w pamięci
c) Porównanie wydajności różnych metod dostępu do plików
4. Serializacja
a) Podstawy serializacji
b) Problemy z serializacją
c) Analiza wyników serializacji
d) Sposoby optymalizacji serializacji
IV. Algorytm wydajności
1. Sztuka doboru algorytmu
a) Porównanie algorytmów
b) Elegancja a brute-force
c) Dziedzina problemu a algorytm
2. Problemy z rekurencją
3. Nie tylko algorytm się liczy
V. Kolekcje i tablice
1. API kolekcji
a) Podstawowe interfejsy
- Iterator
- Iterable
- Collection
- Set
- List
- Queue
- Deque
- Map
b) Najważniejsze funkcje
2. Struktury danych - podstawy wydajnych operacji
a) Tablica laszująca
- Kontrakt między equals a hashCode
- Kontrakt equals
- Problemy z danymi w tablicy haszującej
b) Przeszukiwanie binarne
- Drzewa czerwono-czarne
*Opis zagadnienia
*Zasady działania
*Przykłady działania
3. Zbiory
a) Wydajność standardowych implementacji
- HashSet
- TreeSet
- LinkedHashSet
- EnumSet
b) Nowe interfejsy zbiorów (Java 6)
- NavigableSet
c) Optymalizacja pracy na zbiorach
d) Porównanie wydajności różnych implementacji przy różnych zadaniach
4. Listy
a) Wydajność standardowych implementacji
- ArrayList
- LinkedList
b) Optymalizacja pracy z listami
c) Porównanie wydajności list
d) Opis struktur ArrayList i LinkedList - wizualizacja złożoności operacji
e) Interfejs RandomAccess a wydajność przeglądania listy
5. Kolejki
a) Wydajność standardowych implementacji
- PriorityQueue
- LinkedList
b) Nowe API - kolejki dwustronne (Java 6)
- Interfejs Deque
- Wydajność implementacji kolejki dwustronnej
*LinkedList
*ArrayDeque
6. Mapy
a) Wydajność standardowych implementacji
- HashMap
- TreeMap
- EnumMap
- IdentityHashMap
- WeakHashMap
- LinkedHashMap
b) Nowe API map (Java6)
- NavigableMap
c) Optymalizacja pracy na mapach
d) Porównanie wydajności map
e) Jak stworzyć cache
7. Stare kontenery (Java 1.0 i 1.1)
a) Implementacje starych kontenerów
- Hashtable
- Vector
- Stack
- BitSet
b) Enymerator - Enymeration
c) Porównanie wydajności z nowymi implementacjami
8. Widok kolekcji
a) Zalety używania
b) Niebezpieczeństwa
c) Optymalizacja
9. Collections- klasa pomocnicza
a) Podstawowe funkcje
b) Rola w optymalizacji
c) Wykorzystanie w algorytmach
10. Wydajność a kolekcje odporne na wielowątkowość
a) Wydajność kolejek wielowątkowych
- ConcurrentLinkedQueue
b) Wydajność kolejek blokujących
- BlockingQueue
- ArrayBlockingQueue
- DelayQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- SynchronousQueue
c) Wydajność dwustronnych kolejek blokujących
- BlockingDeque
- LinkedBlockingDeque
d) Wydajność list wielowątkowych
- CopyOnWriteArrayList
e) Wydajność map wielowątkowych
- ConcurrentMap
- ConcurrentNavigableMap
- ConcurrentHashMap
- ConcurrentSkipListMap
11. Tablice
a) Zalety stosowania tablic
b) Wady stosowania tablic
c) Porównanie tablic z ArrayList
d) Klasa pomocnicza Arrays
VI. Kontrola ładowania klas
1. Ładowanie klas- proces
2. Klasa Class
3. ClassLoader- kiedy tworzyć?
4. Po co kontrolować ładowanie klas?
5. Zachłanne ładowanie klas
a) Jak działa zachłanne ładowanie klas
b) Przykład zachłannego ładowania klas
c) Kontrola zachłannego ładowania klas
6. Redukowanie ilości klas
a) Klasy wewnętrzne
b) Łączenie listenerów
c) Refleksja
d) Dynamiczne Proxy
7. Kiedy warto kontrolować ładowanie klas?
VII. Zarządzanie pamięcią
1. Java a zarządzanie pamięcią
a) Jak działa odśmiecanie pamięci (Garbage Collector)
b) Co gwarantuje Garbage Collector?
c) Cykl życia obiektu
- Fazy cyklu życia obiektu
- Wyspy obiektów
- Metoda finalize
- Problemy i pułapki
2. Typy referencji a Garbage Collector i proces odśmiecania
a) SoftReference
b) WeakReference
c) PhantomReference
3. Wycieki pamięci w Javie
a) Powody
b) Złe praktyki
c) Unikanie
4. Garbage Collector - złe praktyki
5. Ograniczanie zajętości pamięci
6. Opcje strojenia Garbage Collector'a
a) Parametry konfiguracyjne Garbage Collector'a
- Słaba teoria generacji - podstawa wydajnej pracy na obiektach
- Typy odśmiecania
*Minor Collections
*Major Collections
-Generacje obiektów
*Organizacja pamięci w Javie
*Młoda generacja
*Eden
*Survivor Space
*Stara generacja
*Pamięć permanentna
- Parametry wydajnościowe Garbage Collector
- Wymiarowanie pamięci (generacji)
b) Optymalizacja algorytmu odśmiecania dla konkretnej aplikacji na konkretnej platformie sprzętowej
c) Rodzaje GC
- Serial Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
- Parraler Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
- Concurent Collector
*Zasady działania
*Preferencje
*Skalowalność
*Strojenie
*Problemy i rozwiązania
d) Zalecenia przy wyborze GC
VIII. Maszyna wirtualna Javy
1. Podstawowe tryby pracy a wydajność
2. Parametry wydajnościowe JVM
3. Porównanie wydajności różnych wersji JVM (1.4, 5.x, 6.x)
a) Na poziomie różnych benchmarków
- JBB2000
- JBB2005
- VolanoMark 2.5
- I/O Benchmark Comparsion
- CMS Server Benchmark
b) Na poziomie różnych parametrów wydajnościowych
- Działanie po stronie serwera
- Startup
- RAM footprint
- Kopiowanie tablic
- Wydajność GC
- Operacje wejścia-wyjścia
IX. Problemy z optymalizacją
1. Optymalizacje kompilatora a micro-benchmark
2. Micro-benchmark a GC
3. Uruchamianie wielu aplikacji
4. Przyzwyczajenia programistów
5. Optymalizacja za kompilator
6. Przedwczesna optymalizacja
7. Antywzorze związane z wydajnością
a) Zachłanność
b) Pośpiech
c) Lenistwo
d) Ignorancja
Prelegenci


Doświadczeni trenerzy Sages
Weź udział
Cena 1
cena netto
4750
PLN
Cena zawiera:
- materiały szkoleniowe, lunch, przerwy kawowe
Weź udział
Wydarzenie nieaktualne. Wypełnij formularz, aby zapytać o nowe terminy.
Organizator
FAQ
Najczęściej zadawane pytania
Prosimy o przejście do sekcji
Weź udział, aby
wypełnić formularz zgłoszenia w wydarzeniu. Po jego wysłaniu organizator skontaktuje
się celem potwierdzenia przyjęcia zgłoszenia i przekazania szczegółów organizacyjnych.
Od uczestników wymagana jest umiejętność programowania w języku Java.
W celu zgłoszenia się na szkolenie, prosimy o kontakt telefoniczny: 22.2035600
lub mailowy: j.ambroziak@sages.com.pl
W celu zgłoszenia się na szkolenie, prosimy o kontakt telefoniczny: 22.2035600
lub mailowy: j.ambroziak@sages.com.pl
- Chcesz wiedzieć więcej? Napisz do nas! lub zadzwoń!
Kontakt
Masz pytania? Napisz do nas

Wypełnij formularz
Dane kontaktowe
Sages Sp. z o.o.
02-796 Warszawa
ul. Wąwozowa 11