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

Prelegenci

Cytat
Doświadczeni trenerzy Sages

Gdzie i kiedy

Warszawa 5 - 9 grudnia 2011
Sages Sp. z o.o.

02-796 Warszawa

Wąwozowa 11

woj. mazowieckie

Weź udział

Cena 1
cena netto
4750 PLN
Cena zawiera:
  • materiały szkoleniowe, lunch, przerwy kawowe
Weź udział

Organizator

Sages Sp. z o.o.
02-796 Warszawa
ul. Wąwozowa 11
woj. mazowieckie
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

Kontakt

Masz pytania? Napisz do nas

Wypełnij formularz

Wiadomość została wysłana!
Uzupełnij pole
Wybierz termin wydarzenia
Uzupełnij pole
Uzupełnij pole
Uzupełnij wiadomość
Potwierdź, że nie jesteś botem.
Musisz zaakceptować regulamin.

Dane kontaktowe

Sages Sp. z o.o.
02-796 Warszawa ul. Wąwozowa 11
Darmowy biuletyn informacyjny

Zapisz się do newslettera i otrzymuj powiadomienia o nowych wydarzeniach!