Adresaci Szkolenia:

Szkolenie jest adresowane do programistów języka Java, którzy chcą poznać sekrety tworzenia wydajnego oprogramowania w tym języku.

Cel szkolenia:

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.

Wymagania:

Od uczestników wymagana jest umiejętność programowania w języku Java.

Parametry szkolenia:

5*8 godzin (5*7 godzin netto) wykładów i warsztatów (z wyraźną przewagą warsztatów). W trakcie warsztatów, odnajdywane są wąskie gardła aplikacji, badane aspekty wydajnościowe różnych struktur danych i sposobów dostępu do dysku, a także ćwiczone zaawansowane aspekty języka Java.

Wielkość grupy: maks. 8-10 osób.

Program szkolenia

  1. Tworzenie wydajnego oprogramowania
    1. Różne wymiary wydajności
      1. Wydajność obliczeniowa
      2. Wydajność pamięciowa (RAM footprint)
      3. Wydajność uruchomienia
      4. Wydajność skalowania
    2. Wydajność a użytkownik - subiektywne odczucie wydajności
    3. Proces tworzenia wydajnego oprogramowania
      1. Analiza wydajności
      2. Projektowanie a wydajność
      3. Architektura a wydajność
      4. Kodowanie a wydajność
      5. Testowanie a wydajność
      6. Profilowanie a wydajność
    4. Co wpływa na wydajność w Javie
  2. Pomiary wydajności
    1. Problemy ze zwiększaniem wydajności
    2. Co to jest Benchmarking
      1. Sposoby dokonywania pomiarów
      2. Zalety budowania benchmarków
      3. Micro-benchmark
      4. Macro-benchmark
      5. Problemy wyników pomiarowania
    3. Czym jest profilowanie aplikacji
      1. Wpływ profilowania na wydajność
      2. Problemy z płaskim profilowaniem
      3. Zalety narzędzi do profilowania
      4. Narzędzia do profilowania (Java 6)
        1. Problemy do zdiagnozowania
        2. Opis narzędzi
        3. Profilowanie w Eclipse
  3. Wydajna praca z plikami
    1. Strumienie
      1. Podstawy
      2. Analiza alternatywnych rozwiązań
      3. Porównania wydajności rozwiązań na strumieniach
    2. Swobodny dostęp do plików
    3. Lepsza wydajność - bibliotek NIO
      1. Kanały
        1. FileChannel
        2. ByteBuffer
        3. Przykłady użycia kanałów
        4. Porównanie wydajność rozwiązań
      2. Odwzorowywanie plików w pamięci
      3. Porównanie wydajności różnych metod dostępu do plików
    4. NIO2 - Java7
      1. Path (operacje na ścieżkach)
      2. Files (operacje na plikach i katalogach)
        1. Kopiowanie/Przenoszenie
        2. System plików
        3. Nowe funkcje odczytu/zapisu
        4. StandardOpenOptions
        5. Nowa konstrukcja try i Closeable (try-with-resources)
    5. Serializacja
      1. Podstawy serializacji
      2. Problemy z serializacją
      3. Analiza wyników serializacji
      4. Sposoby optymalizacji serializacji
  4. Algorytm wydajności
    1. Sztuka doboru algorytmu
      1. Porównanie algorytmów
      2. Elegancja a brute-force
      3. Dziedzina problemu a algorytm
    2. Problemy z rekurencją
    3. Nie tylko algorytm się liczy
  5. Kolekcje i tablice
    1. API kolekcji
      1. Podstawowe interfejsy
        1. Iterator
        2. Iterable
        3. Collection
          1. Set
          2. List
          3. Queue
          4. Deque
        4. Map
      2. Najważniejsze funkcje
    2. Struktury danych - podstawy wydajnych operacji
      1. Tablica laszująca
        1. Kontrakt między equals a hashCode
        2. Kontrakt equals
        3. Problemy z danymi w tablicy haszującej
      2. Przeszukiwanie binarne
        1. Drzewa czerwono-czarne
          1. Opis zagadnienia
          2. Zasady działania
          3. Przykłady działania
    3. Zbiory
      1. Wydajność standardowych implementacji
        1. HashSet
        2. TreeSet
        3. LinkedHashSet
        4. EnumSet
      2. Nowe interfejsy zbiorów (Java 6)
        1. NavigableSet
      3. Optymalizacja pracy na zbiorach
      4. Porównanie wydajności różnych implementacji przy różnych zadaniach
    4. Listy
      1. Wydajność standardowych implementacji
        1. ArrayList
        2. LinkedList
      2. Optymalizacja pracy z listami
      3. Porównanie wydajności list
      4. Opis struktur ArrayList i LinkedList - wizualizacja złożoności operacji
      5. Interfejs RandomAccess a wydajność przeglądania listy
    5. Kolejki
      1. Wydajność standardowych implementacji
        1. PriorityQueue
        2. LinkedList
      2. Nowe API - kolejki dwustronne (Java 6)
        1. Interfejs Deque
        2. Wydajność implementacji kolejki dwustronnej
          1. LinkedList
          2. ArrayDeque
    6. Mapy
      1. Wydajność standardowych implementacji
        1. HashMap
        2. TreeMap
        3. EnumMap
        4. IdentityHashMap
        5. WeakHashMap
        6. LinkedHashMap
      2. Nowe API map (Java6)
        1. NavigableMap
      3. Optymalizacja pracy na mapach
      4. Porównanie wydajności map
      5. Jak stworzyć cache
    7. Stare kontenery (Java 1.0 i 1.1)
      1. Implementacje starych kontenerów
        1. Hashtable
        2. Vector
        3. Stack
        4. BitSet
      2. Enymerator - Enymeration
      3. Porównanie wydajności z nowymi implementacjami
    8. Widok kolekcji
      1. Zalety używania
      2. Niebezpieczeństwa
      3. Optymalizacja
    9. Collections- klasa pomocnicza
      1. Podstawowe funkcje
      2. Rola w optymalizacji
      3. Wykorzystanie w algorytmach
    10. Wydajność a kolekcje odporne na wielowątkowość
      1. Wydajność kolejek wielowątkowych
        1. ConcurrentLinkedQueue
      2. Wydajność kolejek blokujących
        1. BlockingQueue
        2. ArrayBlockingQueue
        3. DelayQueue
        4. LinkedBlockingQueue
        5. PriorityBlockingQueue
        6. SynchronousQueue
      3. Wydajność dwustronnych kolejek blokujących
        1. BlockingDeque
        2. LinkedBlockingDeque
      4. Wydajność list wielowątkowych
        1. CopyOnWriteArrayList
      5. Wydajność map wielowątkowych
        1. ConcurrentMap
        2. ConcurrentNavigableMap
        3. ConcurrentHashMap
        4. ConcurrentSkipListMap
    11. Tablice
      1. Zalety stosowania tablic
      2. Wady stosowania tablic
      3. Porównanie tablic z ArrayList
      4. Klasa pomocnicza Arrays
  6. Caliper - microbenchmark Framework
    1. Czym jest Caliper
    2. SimpleBenchmark
    3. Przykłady menchmarków
    4. Uruchomienie Caliper
    5. Benchmarki parametryzowane (@Param)
    6. Parametry Caliper
    7. Prezentacja wyników przez WWW
    8. Pułapki
  7. 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
      1. Jak działa zachłanne ładowanie klas
      2. Przykład zachłannego ładowania klas
      3. Kontrola zachłannego ładowania klas
    6. Redukowanie ilości klas
      1. Klasy wewnętrzne
      2. Łączenie listenerów
      3. Refleksja
      4. Dynamiczne Proxy
    7. Kiedy warto kontrolować ładowanie klas?
  8. Zarządzanie pamięcią
    1. Java a zarządzanie pamięcią
      1. Jak działa odśmiecanie pamięci (Garbage Collector)
      2. Co gwarantuje Garbage Collector?
      3. Cykl życia obiektu
        1. Fazy cyklu życia obiektu
        2. Wyspy obiektów
        3. Metoda finalize
        4. Problemy i pułapki
    2. Typy referencji a Garbage Collector i proces odśmiecania
      1. SoftReference
      2. WeakReference
      3. PhantomReference
    3. Wycieki pamięci w Javie
      1. Powody
      2. Złe praktyki
      3. Unikanie
    4. Garbage Collector - złe praktyki
    5. Ograniczanie zajętości pamięci
    6. Opcje strojenia Garbage Collector'a
      1. Parametry konfiguracyjne Garbage Collector'a
        1. Słaba teoria generacji - podstawa wydajnej pracy na obiektach
        2. Typy odśmiecania
          1. Minor Collections
          2. Major Collections
        3. Generacje obiektów
          1. Organizacja pamięci w Javie
          2. Młoda generacja
            1. Eden
            2. Survivor Space
          3. Stara generacja
          4. Pamięć permanentna
        4. Parametry wydajnościowe Garbage Collector
        5. Wymiarowanie pamięci (generacji)
      2. Optymalizacja algorytmu odśmiecania dla konkretnej aplikacji na konkretnej platformie sprzętowej
      3. Rodzaje GC
        1. Rodzaje
          1. Serial Collector (Serial + Serial Old)
          2. Parallel Collector (Parallel Scavenge + Parallel Old)
          3. Concurent Collector
          4. Parallel Copying Collector
          5. G1 – Garbage First
        2. Zasady działania
        3. Preferencje
        4. Skalowalność
        5. Strojenie
        6. Problemy i rozwiązania
      4. Opcje podglądu pracy GC
      5. Zalecenia przy wyborze GC
  9. 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, 7.x)
      1. Na poziomie różnych benchmarków
        1. JBB2000
        2. JBB2005
        3. VolanoMark 2.5
        4. I/O Benchmark Comparsion
        5. CMS Server Benchmark
      2. Na poziomie różnych parametrów wydajnościowych
        1. Działanie po stronie serwera
        2. Startup
        3. RAM footprint
        4. Kopiowanie tablic
        5. Wydajność GC
        6. Operacje wejścia-wyjścia
  10. 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ą
      1. Zachłanność
      2. Pośpiech
      3. Lenistwo
      4. Ignorancja

Pytania?

* Wymagane.
** Szczegóły promocji w Regulaminie.


Konsultant on-line
Skorzystaj z usług naszego konsultanta on-line.
Naciśnij przycisk ‘Skorzystaj’ aby przejść do okienka czatu
Kontakt
ul. Nowogrodzka 62c
02-002 Warszawa
Telefon +48 22 2035600
Fax +48 22 2035601
Email