Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00328 005004 14833427 na godz. na dobę w sumie
Wydajność Javy - książka
Wydajność Javy - książka
Autor: , Liczba stron: 528
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-4380-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

Poznaj i wykorzystaj optymalne sposoby na regulowanie wydajności oprogramowania Java!

Na rynku znajduje się już kolejne wydanie języka Java, oznaczone numerem 7. Oto najlepszy dowód, że język ten ma się dobrze i wciąż jest na topie. Oczywiście potwierdza to fakt, że programiści Javy to jedna z najbardziej rozchwytywanych grup na rynku pracy. Dlatego warto zainwestować w naukę tego języka. Do Javy przylgnęła krzywdząca opinia, że jest powolna i mało wydajna, ale to mit! W dzisiejszych czasach język ten ani na krok nie ustępuje innym, a jeżeli zastosujesz się do wskazówek zawartych w tej wyjątkowej książce, może je nawet prześcignąć!

Na początku lektury dowiesz się, jak wiarygodnie monitorować obciążenie systemu operacyjnego - zużycie pamięci, obciążenie procesora oraz sieci. Następnie przejdziesz do tego, na co czekasz najbardziej: do dostrajania Twojej aplikacji oraz wirtualnej maszyny Java. Poznasz szczegółowo zasady działania mechanizmów odzyskujących pamięć oraz dostępne przełączniki, które potrafią w znaczący sposób wpłynąć na wydajność środowiska. Ponadto zgłębisz tematykę wydajności aplikacji internetowych oraz technologii EJB i JPA. Jest to długo oczekiwana na polskim rynku pozycja, poświęcona zagadnieniom niezwykle istotnym z punktu widzenia programisty. To Twoja obowiązkowa lektura na najbliższe dni!

Przekonaj się, jak szybka może być Java dzięki:

Wyciśnij siódme poty z wirtualnej maszyny Java!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Java Performance on Multi-Core Platforms, First Edition Tłumaczenie: Lech Lachowski Projekt okładki: proj: Studio Gravite / Olsztyn Obarek, Pokoński, Pazdrijowski, Zaprucki ISBN: 978-83-246-4380-6 Authorized translation from the English language edition, entitled: JAVA PERFORMANCE ON MULTI-CORE PLATFORMS, First Edition; ISBN 0137142528; by Charlie Hunt; and John Binu; published by Pearson Education, Inc, publishing as Prentice Hall. Copyright © 2012 by Oracle and/or its affiliates. All rights reserved. Oracle is headquartered at 500 Oracle Parkway, Redwood Shores, CA 94065, U.S.A. All rights reserved. No part of this book may by reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A. Copyright © 2013. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/wydjav.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/wydjav Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treĞci Przedmowa .................................................................................................. 13 Przedmowa .................................................................................................. 15 WstĊp .......................................................................................................... 17 PodziĊkowania ............................................................................................. 21 O autorach ................................................................................................... 23 1. Strategie, podejĞcia i metodologie ........................................................... 25 Zasadnicze czynniki ....................................................................................................................26 Dwa podejĂcia: z góry do doïu oraz z doïu do góry ...................................................................29 Metoda z góry do doïu ............................................................................................................29 Metoda z doïu do góry ............................................................................................................30 Wybór odpowiedniej platformy i ocena systemu ......................................................................31 Wybór wïaĂciwej architektury procesora ...............................................................................32 Ocena wydajnoĂci systemu .....................................................................................................33 Bibliografia ...................................................................................................................................34 2. Monitorowanie wydajnoĞci systemu operacyjnego .................................. 35 Definicje ......................................................................................................................................36 Wykorzystanie CPU ....................................................................................................................36 Monitorowanie wykorzystania CPU w systemach Windows ...............................................37 Monitorowanie wykorzystania CPU w systemach Windows za pomocÈ komendy typeperf ...............................................................................................40 Monitorowanie wykorzystania CPU w systemach Linux .....................................................41 Monitorowanie wykorzystania CPU w systemach Solaris ....................................................42 Monitorowanie wykorzystania CPU w systemach Linux i Solaris za pomocÈ narzÚdzi wiersza poleceñ ...................................................................................45 6 WydajnoĞü Javy Kolejka uruchamiania planisty krótkoterminowego ..................................................................48 Monitorowanie kolejki uruchamiania planisty krótkoterminowego w systemach Windows ..........................................................................................................49 Monitorowanie kolejki uruchamiania planisty krótkoterminowego w systemach Solaris ..............................................................................................................50 Monitorowanie kolejki uruchamiania planisty krótkoterminowego w systemach Linux ................................................................................................................51 Wykorzystanie pamiÚci ...............................................................................................................51 Monitorowanie wykorzystania pamiÚci w systemach Windows ...........................................52 Monitorowanie wykorzystania pamiÚci w systemach Solaris ...............................................53 Monitorowanie wykorzystania pamiÚci w systemach Linux .................................................54 Monitorowanie rywalizacji o blokady w systemach Solaris ..................................................55 Monitorowanie rywalizacji o blokady w systemach Linux ...................................................57 Monitorowanie rywalizacji o blokady w systemach Windows .............................................57 Izolowanie gorÈcych blokad ....................................................................................................58 Monitorowanie mimowolnego przeïÈczania kontekstu .........................................................58 Monitorowanie migracji wÈtków ............................................................................................59 Wykorzystanie we/wy sieci .........................................................................................................59 Monitorowanie wykorzystania we/wy sieci w systemach Solaris .........................................60 Monitorowanie wykorzystania we/wy sieci w systemach Linux ..........................................61 Monitorowanie wykorzystania we/wy sieci w systemach Windows ....................................61 WzglÚdy dotyczÈce poprawy wydajnoĂci aplikacji ................................................................62 Wykorzystanie we/wy dysku .......................................................................................................63 Dodatkowe narzÚdzia wiersza poleceñ ......................................................................................65 Monitorowanie wykorzystania CPU w systemach z procesorami SPARC T ...........................66 Bibliografia ...................................................................................................................................69 3. Przegląd JVM ............................................................................................ 71 Wysokopoziomowa architektura HotSpot VM ..........................................................................72 HotSpot VM Runtime .................................................................................................................73 Opcje wiersza poleceñ ............................................................................................................74 Cykl ĝycia maszyny wirtualnej ...............................................................................................75 ’adowanie klas maszyny wirtualnej .......................................................................................78 Weryfikacja kodu bajtowego ...................................................................................................80 UdostÚpnianie danych klas .....................................................................................................81 Interpreter ...............................................................................................................................82 Obsïuga wyjÈtków ...................................................................................................................84 Synchronizacja .........................................................................................................................84 ZarzÈdzanie wÈtkami ...............................................................................................................85 ZarzÈdzanie stertÈ C++ .........................................................................................................89 Java Native Interface ...............................................................................................................90 Obsïuga bïÚdów krytycznych VM ..........................................................................................91 Mechanizmy odzyskiwania pamiÚci HotSpot VM ....................................................................93 Pokoleniowy mechanizm odzyskiwania pamiÚci ...................................................................93 Mïode pokolenie ......................................................................................................................95 Szybka alokacja ........................................................................................................................97 Mechanizmy odzyskiwania pamiÚci, czyli osioïkowi w ĝïoby dano .....................................97 Spis treĞci 7 Szeregowy mechanizm odzyskiwania pamiÚci ......................................................................98 Równolegïy mechanizm odzyskiwania pamiÚci: przepustowoĂÊ ma znaczenie! .................99 Przewaĝnie-równoczesny mechanizm odzyskiwania pamiÚci: opóěnienie ma znaczenie! ....99 Mechanizm odzyskiwania pamiÚci najpierw-kosz: nastÚpca CMS ....................................102 Porównanie ............................................................................................................................102 Generowanie pracy mechanizmu odzyskiwania pamiÚci ....................................................103 Perspektywa historyczna .......................................................................................................103 Kompilatory JIT HotSpot VM ..................................................................................................104 Analiza hierarchii klas ...........................................................................................................105 Polityka kompilacji ................................................................................................................106 Deoptymalizacja ....................................................................................................................107 Kompilator JIT dla aplikacji klienckich ...............................................................................108 Kompilator JIT dla aplikacji serwerowych ..........................................................................108 SSA — wykres programowo zaleĝny ....................................................................................108 NadchodzÈce poprawki .........................................................................................................110 Regulacja adaptacyjna HotSpot VM ........................................................................................111 WartoĂci domyĂlne dla Java 1.4.2 .........................................................................................111 Ergonomiczne wartoĂci domyĂlne dla 5. wersji Javy ..........................................................111 Zaktualizowane domyĂlne wartoĂci ergonomiczne dla Java 6 Update 18 ..........................113 Adaptacyjne ustalanie rozmiaru sterty Java .........................................................................115 Nie tylko ergonomia ..............................................................................................................115 Bibliografia .................................................................................................................................116 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy ............................. 117 Definicje ....................................................................................................................................118 Odzyskiwanie pamiÚci ..............................................................................................................118 Dane istotne dla procesu odzyskiwania pamiÚci .................................................................119 Raportowanie danych procesu odzyskiwania pamiÚci ........................................................119 Analiza offline danych z procesów odzyskiwania pamiÚci ..................................................129 NarzÚdzia graficzne ...............................................................................................................132 Kompilator JIT ..........................................................................................................................150 ’adowanie klas ..........................................................................................................................151 Monitorowanie aplikacji Java ...................................................................................................153 Szybkie monitorowanie rywalizacji o blokady .....................................................................154 Bibliografia .................................................................................................................................156 5. Profilowanie aplikacji Java ..................................................................... 157 Terminologia ..............................................................................................................................159 Terminy zwiÈzane z profilowaniem .....................................................................................159 PojÚcia zwiÈzane z programem Oracle Solaris Studio Performance Analyzer ..................159 PojÚcia zwiÈzane z programem NetBeans Profiler .............................................................160 Oracle Solaris Studio Performance Analyzer ..........................................................................161 Obsïugiwane platformy .........................................................................................................161 Pobieranie i instalacja programu Oracle Solaris Studio Performance Analyzer ...............162 Przechwytywanie profilu Oracle Solaris Studio Performance Analyzer ............................163 PrzeglÈdanie zebranej próby ................................................................................................166 Prezentacja danych ................................................................................................................174 8 WydajnoĞü Javy Filtrowanie danych profilu ...................................................................................................177 NarzÚdzie wiersza poleceñ er_print .....................................................................................178 Program NetBeans Profiler .......................................................................................................185 Obsïugiwane platformy .........................................................................................................186 Pobieranie i instalacja NetBeans Profiler ............................................................................186 Rozpoczynanie sesji profilowania metod .............................................................................186 Controls, czyli przyciski sterujÈce ........................................................................................193 Status ......................................................................................................................................193 Profiling Results, czyli rezultaty profilowania .....................................................................193 Saved Snapshots, czyli zapisane zrzuty ekranu ...................................................................193 View, czyli podglÈd ...............................................................................................................194 Basic Telemetry, czyli podstawowa telemetria ....................................................................194 PrzeglÈdanie aktualnych rezultatów .....................................................................................195 Wykonywanie zrzutu ekranu rezultatów .............................................................................195 Rozpoczynanie sesji profilowania pamiÚci ..........................................................................196 PrzeglÈdanie bieĝÈcych rezultatów ......................................................................................198 Wykonywanie zrzutu ekranu rezultatów .............................................................................200 Izolowanie wycieków pamiÚci ..............................................................................................201 Analiza zrzutów sterty ...........................................................................................................201 Bibliografia .................................................................................................................................202 6. Profilowanie aplikacji Java — porady i sztuczki ...................................... 203 Potencjalne obszary poprawy wydajnoĂci ................................................................................203 Wykorzystanie CPU przez jÈdro lub system ...........................................................................204 Rywalizacja o blokady ...............................................................................................................212 Uĝycie sïowa kluczowego volatile ............................................................................................221 Zmiana rozmiaru struktur danych ............................................................................................222 Zmiana rozmiaru klas StringBuilder lub StringBuffer ........................................................223 Zmiana rozmiaru klas Java Collections ................................................................................226 ZwiÚkszanie wspóïczynnika równolegïoĂci ..............................................................................230 Wysokie wykorzystanie CPU ....................................................................................................232 Inne uĝyteczne wskazówki dotyczÈce programu Performance Analyzer ..............................233 Bibliografia .................................................................................................................................235 7. Regulacja JVM krok po kroku ................................................................. 237 Metodologia ...............................................................................................................................238 Zaïoĝenia ................................................................................................................................240 Wymagania dotyczÈce infrastruktury testowania ................................................................240 Wymagania systemowe aplikacji ..............................................................................................241 DostÚpnoĂÊ ............................................................................................................................241 ZarzÈdzalnoĂÊ ........................................................................................................................241 PrzepustowoĂÊ .......................................................................................................................241 Opóěnienie i czas reakcji ......................................................................................................242 Zuĝycie pamiÚci .....................................................................................................................242 Czas uruchamiania ................................................................................................................242 Ranking wymagañ systemowych ..............................................................................................242 Wybór modelu wdroĝenia JVM ................................................................................................243 Model wdroĝenia pojedynczej instancji JVM ......................................................................243 Spis treĞci 9 Model wdroĝenia wielu instancji JVM .................................................................................243 Wskazówki ogólne .................................................................................................................244 Wybór Ărodowiska uruchomieniowego JVM.............................................................................244 ¥rodowisko uruchomieniowe typu klienckiego czy serwerowego .........................................244 32-bitowa czy 64-bitowa maszyna wirtualna Javy ...............................................................245 Mechanizmy odzyskiwania pamiÚci .....................................................................................246 Podstawy regulowania mechanizmu odzyskiwania pamiÚci ...................................................246 Atrybuty wydajnoĂci ..............................................................................................................246 Podstawowe zasady ...............................................................................................................247 Opcje wiersza poleceñ oraz rejestrowanie zdarzeñ dla mechanizmu odzyskiwania pamiÚci .............................................................................247 OkreĂlanie zuĝycia pamiÚci ......................................................................................................251 Ograniczenia ..........................................................................................................................251 Ukïad sterty HotSpot VM .....................................................................................................252 Punkt poczÈtkowy rozmiaru sterty .......................................................................................254 Obliczanie rozmiaru ĝywych danych ...................................................................................256 Konfiguracja poczÈtkowego rozmiaru sterty ........................................................................257 Dodatkowe uwagi ..................................................................................................................259 Regulowanie opóěnienia/czasu reakcji .....................................................................................259 Przesïanki ...............................................................................................................................260 Precyzyjna regulacja rozmiaru przestrzeni mïodego pokolenia .........................................261 Precyzyjna regulacja rozmiaru przestrzeni starego pokolenia ...........................................264 Precyzyjna regulacja opóěnieñ dla równoczesnego mechanizmu odzyskiwania pamiÚci .........................................................................................................267 ObjaĂnienie przestrzeni ocalaïych ........................................................................................269 ObjaĂnienie progu zatrudnienia ...........................................................................................271 Monitorowanie progu zatrudnienia ......................................................................................272 Ustalanie rozmiaru przestrzeni ocalaïych ............................................................................274 BezpoĂrednio wywoïywane procesy odzyskiwania pamiÚci ...............................................280 Równoczesne odzyskiwanie pamiÚci dla staïego pokolenia ...............................................281 Regulacja czasu przestojów CMS .........................................................................................282 Kolejne czynnoĂci ..................................................................................................................283 Regulowanie przepustowoĂci aplikacji ....................................................................................283 Regulacja przepustowoĂci dla CMS .....................................................................................284 Regulacja przepustowoĂciowego mechanizmu odzyskiwania pamiÚci ..............................285 Regulacja rozmiaru przestrzeni ocalaïych ...........................................................................287 Regulacja liczby wÈtków przepustowoĂciowego mechanizmu odzyskiwania pamiÚci .....290 Wdroĝenie na systemach NUMA .........................................................................................291 Kolejne czynnoĂci ..................................................................................................................291 Przypadki skrajne ......................................................................................................................291 Dodatkowe opcje wiersza poleceñ do regulowania wydajnoĂci .............................................292 Najnowsze i najwiÚksze optymalizacje ................................................................................292 Analiza ucieczki .....................................................................................................................292 Blokada przeciÈgana ..............................................................................................................293 Duĝe strony pamiÚci .............................................................................................................294 Bibliografia .................................................................................................................................296 10 WydajnoĞü Javy 8. Testy porównawcze aplikacji Java ......................................................... 297 Wyzwania dotyczÈce benchmarków .........................................................................................298 Rozgrzewka ............................................................................................................................298 Odzyskiwanie pamiÚci ..........................................................................................................300 Zastosowanie metod Time interfejsów Java API .................................................................301 Usuwanie martwego kodu w wyniku optymalizacji ............................................................302 Wplatanie ...............................................................................................................................307 Deoptymalizacja ....................................................................................................................311 Porady dotyczÈce przygotowywania mikrobenchmarków ..................................................315 Projektowanie eksperymentów .................................................................................................317 Zastosowanie metod statystycznych .........................................................................................318 Obliczanie Ăredniej ................................................................................................................318 Obliczanie odchylenia standardowego .................................................................................319 OkreĂlanie przedziaïu ufnoĂci ..............................................................................................319 Zastosowanie testów hipotezy ..............................................................................................321 Porady dotyczÈce stosowania metod statystycznych ...........................................................323 Literatura ...................................................................................................................................324 Bibliografia .................................................................................................................................324 9. Testy porównawcze aplikacji wielowarstwowych .................................. 325 Wyzwania dotyczÈce benchmarków .........................................................................................326 Rozwaĝania na temat benchmarków typu enterprise ..............................................................328 Definiowanie systemu testowego (SUT) ..............................................................................328 Przygotowywanie mikrobenchmarków ................................................................................329 Definiowanie modelu interakcji z uĝytkownikiem ..............................................................329 Definiowanie metryk wydajnoĂci .........................................................................................333 Skalowanie benchmarku .......................................................................................................337 Weryfikacja za pomocÈ prawa Little’a .................................................................................338 Czas na zastanowienie ...........................................................................................................340 Analiza skalowalnoĂci ............................................................................................................343 Przeprowadzanie benchmarku .............................................................................................343 Monitorowanie serwera aplikacji .............................................................................................347 Monitorowanie za pomocÈ serwera aplikacji GlassFish .....................................................347 Monitorowanie podsystemów ...............................................................................................352 WydajnoĂÊ systemów zewnÚtrznych ....................................................................................356 We/wy dysku .........................................................................................................................359 Monitorowanie i regulacja pul zasobów ...............................................................................361 Profilowanie aplikacji enterprise ..............................................................................................362 Bibliografia .................................................................................................................................363 10. WydajnoĞü aplikacji internetowych ........................................................ 365 Testy porównawcze aplikacji internetowych ...........................................................................366 Komponenty kontenera webowego ..........................................................................................367 Konektor HTTP .....................................................................................................................368 Silnik serwletu .......................................................................................................................369 Monitorowanie i regulowanie wydajnoĂci kontenera webowego ...........................................369 Tryb deweloperski i tryb produkcyjny kontenera ...............................................................370 Menedĝer bezpieczeñstwa ....................................................................................................371 Spis treĞci 11 Regulacje JVM .......................................................................................................................371 HTTP service i kontener webowy ........................................................................................373 Nasïuchiwacz HTTP .............................................................................................................373 Najlepsze praktyki .....................................................................................................................386 Najlepsze praktyki dla serwletów i stron JSP ......................................................................386 Buforowanie pamiÚci podrÚcznej zawartoĂci ......................................................................395 TrwaïoĂÊ sesji .........................................................................................................................400 Buforowanie plików serwera HTTP .....................................................................................401 Bibliografia .................................................................................................................................405 11. WydajnoĞü usáug internetowych ............................................................. 407 WydajnoĂÊ XML ........................................................................................................................408 Cykl przetwarzania XML ......................................................................................................408 Parsowanie/unmarshalling ....................................................................................................409 DostÚp ....................................................................................................................................412 Modyfikacja ............................................................................................................................412 Serializacja/marshalling ........................................................................................................413 Weryfikacja ................................................................................................................................413 RozwiÈzywanie encji zewnÚtrznych .........................................................................................415 CzÚĂciowe przetwarzanie dokumentów XML .........................................................................417 Wybór odpowiedniego interfejsu API .....................................................................................420 Stos modelowej implementacji JAX-WS .................................................................................423 Testy porównawcze usïug internetowych ................................................................................425 Czynniki, które wpïywajÈ na wydajnoĂÊ usïugi internetowej .................................................428 Wpïyw rozmiaru wiadomoĂci ...............................................................................................428 Charakterystyki wydajnoĂci róĝnych typów schematów .....................................................430 Implementacja punktu koñcowego ......................................................................................433 WydajnoĂÊ programu obsïugi ...............................................................................................434 Najlepsze praktyki dotyczÈce wydajnoĂci ................................................................................436 Przetwarzanie binarnego bloku danych ...............................................................................436 Praca z dokumentami XML ..................................................................................................441 Wykorzystanie MTOM do wysyïania dokumentów XML w postaci zaïÈczników ............441 Korzystanie z interfejsu provider .........................................................................................444 Fast Infoset ............................................................................................................................446 Kompresja HTTP ..................................................................................................................448 WydajnoĂÊ klienta usïugi internetowej ................................................................................449 Bibliografia .................................................................................................................................450 12. WydajnoĞü Java Persistence oraz Enterprise Java Beans ....................... 451 Model programowania EJB ......................................................................................................452 Interfejs Java Persistence API i jego implementacja modelowa ............................................453 PamiÚÊ podrÚczna drugiego poziomu ..................................................................................453 Monitorowanie i regulacja kontenera EJB ..............................................................................456 Pula wÈtków ...........................................................................................................................457 Pule beanów i pamiÚci podrÚczne beanów ..........................................................................459 PamiÚÊ podrÚczna sesji EclipseLink ....................................................................................464 Poziom izolacji transakcji ..........................................................................................................465 12 WydajnoĞü Javy Najlepsze praktyki stosowane w Enterprise Java Beans .........................................................466 Benchmark do testów porównawczych EJB wykorzystany w przykïadach .......................466 EJB 2.1 ...................................................................................................................................466 EJB 3.0 ...................................................................................................................................478 Najlepsze praktyki stosowane w Java Persistence ...................................................................481 Zapytania jÚzyka zapytañ JPA ...............................................................................................482 PamiÚÊ podrÚczna wyników zapytañ ....................................................................................484 FetchType ..............................................................................................................................485 Tworzenie puli poïÈczeñ .......................................................................................................486 Aktualizacje zbiorcze .............................................................................................................488 Wybierz wïaĂciwÈ strategiÚ blokowania bazy danych .........................................................489 Odczyty bez transakcji ..........................................................................................................490 Dziedziczenie ........................................................................................................................490 Bibliografia .................................................................................................................................490 A. Wybrane opcje wiersza poleceĔ HotSpot VM .......................................... 493 Skorowidz ................................................................................................. 511 4 Monitorowanie wydajnoĞci maszyny wirtualnej Javy W tym rozdziale opisane zostaïy elementy, które powinny byÊ monitorowane na poziomie stosu programowego maszyny wirtualnej Javy (ang. Java Virtual Machine — JVM). Ponadto przedsta- wione zostaïy narzÚdzia sïuĝÈce do monitorowania JVM oraz najbardziej typowe, powtarzajÈce siÚ wzorce, na które naleĝy zwracaÊ uwagÚ. Szczegóïy dotyczÈce podejmowania na podstawie ze- branych informacji decyzji dotyczÈcych regulacji JVM znajdziesz w rozdziale 7. Na koñcu roz- dziaïu zamieszczony zostaï równieĝ krótki podrozdziaï na temat monitorowania aplikacji. Monitorowanie maszyny wirtualnej Javy jest czynnoĂciÈ, która zawsze powinna byÊ wykony- wana z aplikacjÈ typu produkcyjnego. Poniewaĝ JVM jest kluczowym elementem stosu progra- mowego, powinna byÊ monitorowana w tym samym stopniu, co sama aplikacja oraz system ope- racyjny. Analiza informacji uzyskanych w procesie monitorowania maszyny wirtualnej Javy pozwala stwierdziÊ, kiedy niezbÚdna jest regulacja JVM. Taka regulacja maszyny wirtualnej Javy powinna byÊ przeprowadzana za kaĝdym razem, kiedy zmienia siÚ wersja JVM, dochodzi do zmian w syste- mie operacyjnym (zmiana konfiguracji lub wersji), zmienia siÚ wersja aplikacji lub wykonywane sÈ aktualizacje oraz gdy dochodzi do znaczÈcych zmian w zakresie danych wejĂciowych dla aplikacji. Do zmiany danych wejĂciowych aplikacji moĝe dochodziÊ doĂÊ czÚsto w wielu aplikacjach Java, co moĝe mieÊ wpïyw na wydajnoĂÊ JVM. Dlatego teĝ monitorowanie maszyny wirtualnej Javy jest tak istotnÈ czynnoĂciÈ. Istnieje kilka podstawowych obszarów JVM, które powinny byÊ monitorowane. NaleĝÈ do nich procesy odzyskiwania pamiÚci, dziaïanie kompilatora JIT oraz ïadowanie klas. DostÚpnych jest wiele narzÚdzi umoĝliwiajÈcych monitorowanie maszyny wirtualnej Javy. Niektóre z nich sÈ dystrybuowane z pakietami JDK, inne sÈ darmowe, a jeszcze inne to wersje komercyjne (pïatne). 118 Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy Opisane w tym rozdziale narzÚdzia do monitorowania naleĝÈ do grupy dystrybuowanych z pa- kietami Oracle JDK, do grupy narzÚdzi darmowych lub teĝ do aplikacji typu open source. Ponadto wszystkie prezentowane tu narzÚdzia dostÚpne sÈ dla systemów operacyjnych Windows, Linux oraz Oracle Solaris (zwanego dalej Solaris). Aby wïaĂciwie zrozumieÊ materiaï przedstawiony w tym rozdziale, pomocna bÚdzie wiedza na temat najwaĝniejszych komponentów oraz gïównych operacji nowoczesnej maszyny wirtualnej Javy. Informacje na temat Java HotSpot VM i jej komponentów zostaïy przedstawione w rozdziale 3. Definicje Zanim zagïÚbimy siÚ w szczegóïy dotyczÈce elementów, które naleĝy monitorowaÊ, przydatne moĝe okazaÊ siÚ przypomnienie pojÚÊ „monitorowanie wydajnoĂci” oraz „profilowanie wydajnoĂci” wprowadzonych na poczÈtku rozdziaïu 2. Monitorowanie wydajnoĂci (ang. performance monito- ring) polega na nieinwazyjnym zbieraniu i obserwowaniu danych dotyczÈcych wydajnoĂci dziaïajÈ- cej lub uruchomionej aplikacji. Jest to zazwyczaj dziaïanie typu prewencyjnego lub zapobiegawczego, moĝe wiÚc byÊ przeprowadzane w Ărodowisku produkcyjnym, kwalifikacyjnym lub programi- stycznym. Monitorowanie wydajnoĂci jest równieĝ pierwszym etapem reagowania w sytuacji, kiedy interesariusze danej aplikacji zgïaszajÈ wystÚpowanie problemów z wydajnoĂciÈ, a nie za- pewniajÈ przy tym wystarczajÈcych informacji lub wskazówek na temat potencjalnej przyczyny takiego stanu rzeczy. W takim przypadku prawdopodobne jest, ĝe po fazie monitorowania wydaj- noĂci nastÈpi faza profilowania wydajnoĂci. Monitorowanie wydajnoĂci pozwala równieĝ zidenty- fikowaÊ lub wyizolowaÊ potencjalne problemy bez istotnego wpïywania na czasy reakcji oraz prze- pustowoĂÊ aplikacji. Z kolei profilowanie wydajnoĂci (ang. performance profiling) jest czynnoĂciÈ zbierania danych dotyczÈcych wydajnoĂci dziaïajÈcej lub uruchomionej aplikacji, która to czynnoĂÊ moĝe wpïywaÊ na przepustowoĂÊ lub reakcje aplikacji. Profilowanie wydajnoĂci jest z reguïy dziaïaniem reak- cyjnym lub dziaïaniem, które ma stanowiÊ odpowiedě na problemy z wydajnoĂciÈ zgïaszane przez zainteresowane osoby. Koncentruje siÚ ono zazwyczaj na wÚĝszym obszarze niĝ monitoro- wanie wydajnoĂci. Profilowanie jest rzadko przeprowadzane w Ărodowiskach produkcyjnych. Naj- czÚĂciej wykonywane jest w Ărodowisku kwalifikujÈcym, testujÈcym lub programistycznym i nie- rzadko nastÚpuje po monitorowaniu wydajnoĂci. W odróĝnieniu od monitorowania wydajnoĂci i profilowania wydajnoĂci, regulacja wydajnoĂci (ang. performance tuning) polega na zmianie wartoĂci parametrów regulowanych, kodu ěródïowego lub atrybutów konfiguracji w celu poprawy przepustowoĂci i reakcji. Regulacja wydajnoĂci czÚsto nastÚpuje po monitorowaniu lub profilowaniu wydajnoĂci. Odzyskiwanie pamiĊci Monitorowanie procesów odzyskiwania pamiÚci JVM jest istotnym czynnikiem, poniewaĝ moĝe mieÊ gïÚboki wpïyw na przepustowoĂÊ i opóěnienia aplikacji. Nowoczesne maszyny wirtualne Javy, takie jak Java HotSpot VM (zwana dalej HotSpot VM), zapewniajÈ moĝliwoĂÊ obserwacji statystyk odzyskiwania pamiÚci dla kaĝdego procesu odzyskiwania. Statystyki dostarczane sÈ w formie tek- stowej, zapisywane bezpoĂrednio do pliku dziennika (ang. log file) lub publikowane w interfejsie graficznym (GUI) systemu monitorujÈcego. Podrozdziaï ten rozpoczyna siÚ od przedstawienia listy danych, które sÈ istotne dla procesu odzyskiwania pamiÚci. NastÚpnie zaprezentowany zostaï zestaw opcji wiersza poleceñ HotSpot VM Odzyskiwanie pamiĊci 119 sïuĝÈcy do raportowania statystyk odzyskiwania pamiÚci. Zamieszczono przy tym objaĂnienie zna- czenia raportowanych danych. Dodatkowo przedstawione zostaïo narzÚdzie graficzne, które moĝna wykorzystaÊ do analizy uzyskanych danych. I co najwaĝniejsze, znajduje siÚ tutaj równieĝ opis konkretnych wzorców czy ukïadów danych, na które naleĝy zwracaÊ uwagÚ, oraz sugestie dotyczÈce tego, kiedy trzeba wykonaÊ regulacjÚ mechanizmu odzyskiwania pamiÚci JVM. Dane istotne dla procesu odzyskiwania pamiĊci W statystykach procesu odzyskiwania pamiÚci istotne sÈ nastÚpujÈce dane: „ stosowany mechanizm odzyskiwania pamiÚci; „ rozmiar sterty Java; „ rozmiary przestrzeni mïodego i starego pokolenia; „ rozmiar przestrzeni staïego pokolenia; „ czasy trwania procesów mniejszego odzyskiwania pamiÚci; „ czÚstotliwoĂÊ uruchamiania procesu mniejszego odzyskiwania pamiÚci; „ iloĂÊ przestrzeni odzyskiwanej w procesach mniejszego odzyskiwania pamiÚci; „ czasy trwania procesów peïnego odzyskiwania pamiÚci; „ czÚstotliwoĂÊ uruchamiania procesu peïnego odzyskiwania pamiÚci; „ iloĂÊ przestrzeni odzyskiwanej w cyklach równoczesnego odzyskiwania pamiÚci; „ zapeïnienie sterty Java przed procesem odzyskiwania pamiÚci i po nim; „ zapeïnienie przestrzeni mïodego i starego pokolenia przed procesem odzyskiwania pamiÚci i po nim; „ zapeïnienie przestrzeni staïego pokolenia przed procesem odzyskiwania pamiÚci i po nim; „ okreĂlenie, kiedy proces peïnego odzyskiwania pamiÚci wywoïywany jest przez zapeïnienie przestrzeni starego pokolenia, a kiedy przez zapeïnienie przestrzeni staïego pokolenia; „ ustalenie, kiedy aplikacja korzysta z wyraěnych wywoïañ metody System.gc(). Raportowanie danych procesu odzyskiwania pamiĊci Raportowanie danych statystycznych dla procesów odzyskiwania pamiÚci nie stanowi duĝego obciÈĝenia dla maszyny wirtualnej HotSpot. ObciÈĝenie to jest w rzeczywistoĂci tak znikome, ĝe zaleca siÚ gromadzenie danych odzyskiwania nawet w Ărodowisku produkcyjnym. W tym punkcie opisano kilka róĝnych opcji wiersza poleceñ HotSpot VM sïuĝÈcych do generowania statystyk dziaïania mechanizmu odzyskiwania pamiÚci oraz objaĂniono znaczenie tych statystyk. Zasadniczo istniejÈ dwa typy odzyskiwania pamiÚci: mniejsze odzyskiwanie pamiÚci (ang. minor garbage collection), zwane równieĝ odzyskiwaniem pamiÚci z mïodego pokolenia (ang. young generation garbage collection), oraz peïne odzyskiwanie pamiÚci (ang. full garbage collection), zwane równieĝ gïównym odzyskiwaniem pamiÚci (ang. major garbage collection). Ogólnie rzecz biorÈc, peïne odzyskiwanie pamiÚci obejmuje, oprócz usuwania obiektów „Ămieciowych”, takĝe kompak- towanie przestrzeni starego i staïego pokolenia. Istnieje jednak kilka wyjÈtków od tej reguïy. W ma- szynie wirtualnej HotSpot domyĂlnym zachowaniem przy peïnym odzyskiwaniu pamiÚci jest usuwanie Ămieci z przestrzeni mïodego, starego i staïego pokolenia. Ponadto w tym procesie kompaktowane sÈ przestrzenie starego i staïego pokolenia, a wszystkie ĝywe obiekty z mïodego pokolenia sÈ promowane do starego pokolenia. Dlatego teĝ na koniec procesu peïnego odzyski- 120 Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy wania pamiÚci przestrzeñ mïodego pokolenia jest pusta, a przestrzenie starego i mïodego pokolenia sÈ skompaktowane i przechowujÈ jedynie ĝywe obiekty. Sposoby dziaïania kaĝdego z mechanizmów odzyskiwania pamiÚci maszyny wirtualnej HotSpot zostaïy szczegóïowo opisane w rozdziale 3. Jak juĝ wczeĂniej wspominaliĂmy, mniejsze odzyskiwanie pamiÚci uwalnia obszary pamiÚci zajmowane przez nieosiÈgalne obiekty znajdujÈce siÚ w przestrzeni mïodego pokolenia. Z kolei domyĂlnym zachowaniem dla peïnego odzyskiwania pamiÚci w HotSpot VM jest uwalnianie ob- szarów pamiÚci zajmowanych przez nieosiÈgalne obiekty z przestrzeni mïodego, starego i staïego pokolenia. Moĝna skonfigurowaÊ maszynÚ wirtualnÈ HotSpot tak, aby przy peïnym odzyskiwaniu pamiÚci obiekty „Ămieciowe” z przestrzeni mïodego pokolenia nie byïy zbierane, zanim nie zo- stanÈ zebrane obiekty „Ămieciowe” z przestrzeni starego pokolenia. Sïuĝy do tego opcja wiersza poleceñ -XX:-ScavengeBeforeFullGC. Znak - umieszczony przed ScavengeBeforeFullGC oznacza wyïÈczenie odzyskiwania pamiÚci w mïodym pokoleniu dla procesu peïnego odzyskiwania pamiÚci. Z kolei zastosowanie znaku + przed tÈ opcjÈ oznaczaïoby wïÈczenie odzyskiwania pa- miÚci w przestrzeni mïodego pokolenia dla procesu peïnego odzyskiwania pamiÚci. Jak juĝ pisali- Ămy, domyĂlnym zachowaniem dla HotSpot VM jest wïÈczenie odzyskiwania w mïodym pokoleniu dla peïnego odzyskiwania pamiÚci. Zalecane jest stosowanie ustawieñ domyĂlnych i niewyïÈczanie przestrzeni mïodego pokolenia z procesu peïnego odzyskiwania. Zbieranie obiektów „Ămiecio- wych” w przestrzeni mïodego pokolenia przed wykonaniem tej samej czynnoĂci dla przestrzeni starego pokolenia zazwyczaj przysparza mniej pracy mechanizmowi odzyskiwania pamiÚci oraz po- woduje, ĝe wiÚcej obiektów „Ămieciowych” jest usuwanych, poniewaĝ obiekty w przestrzeni sta- rego pokolenia mogÈ posiadaÊ referencje do obiektów w przestrzeni mïodego pokolenia. JeĂli nie zostanie przeprowadzone odzyskiwanie pamiÚci dla przestrzeni mïodego pokolenia, ĝaden obiekt starego pokolenia, który posiada referencje do obiektów mïodego pokolenia, nie moĝe byÊ usuniÚty. -XX:+PrintGCDetails Mimo iĝ -verbose:gc jest najczÚĂciej stosowanÈ opcjÈ wiersza poleceñ dla raportowania statystyk procesu odzyskiwania pamiÚci, opcja -XX:+PrintGCDetails dostarcza dodatkowych i bardziej istot- nych informacji w tym zakresie. W tej podsekcji zaprezentowano przykïadowy listing z -XX:+PrintGC ´Details dla przepustowoĂciowego oraz równoczesnego mechanizmu odzyskiwania pamiÚci wraz z wyjaĂnieniem dostarczonych danych. Opisane sÈ równieĝ pewne wzorce, których naleĝy szukaÊ w listingu tej opcji. Warto zwróciÊ uwagÚ, ĝe dodatkowe informacje dostarczane przez opcjÚ -XX:+PrintGCDetails mogÈ róĝniÊ siÚ w zaleĝnoĂci od wersji maszyny wirtualnej HotSpot. Poniĝej znajduje siÚ przykïad listingu dla opcji -XX:+PrintGCDetails przy przepustowoĂcio- wym mechanizmie odzyskiwania pamiÚci w Java 6 Update 25. PrzepustowoĂciowy mechanizm odzyskiwania pamiÚci moĝe byÊ wïÈczony za pomocÈ opcji -XX:+UseParallelGC lub -XX:+Use ´ParallelOldGC. Ukïad listingu zostaï podzielony na kilka wierszy w celu uzyskania lepszej przej- rzystoĂci. [GC [PSYoungGen: 99952K- 14688K(109312K)] 422212K- 341136K(764672K), 0.0631991 secs] [Times: user=0.83 sys=0.00, real=0.06 secs] Oznaczenie GC wskazuje na proces mniejszego odzyskiwania pamiÚci. Fragment [PSYoungGen: 99952K 14688K(109312K)] dostarcza informacji na temat przestrzeni mïodego pokolenia. PSYoungGen oznacza, ĝe stosowane odzyskiwanie dla mïodego pokolenia jest wielowÈtkowym procesem przepu- stowoĂciowego mechanizmu odzyskiwania pamiÚci wïÈczonego opcjÈ wiersza poleceñ –XX:+Use ´ParallelGC lub automatycznie uruchomionego przez –XX:+UseParallelOldGC. Inne dostÚpne Odzyskiwanie pamiĊci 121 mechanizmy odzyskiwania pamiÚci dla mïodego pokolenia to: ParNew, czyli wielowÈtkowy proces odzyskiwania pamiÚci dla mïodego pokolenia stosowany przez równoczesny mechanizm odzyski- wania pamiÚci starego pokolenia znany jako CMS, oraz DefNew, czyli jednowÈtkowy proces odzy- skiwania pamiÚci dla mïodego pokolenia stosowany przez szeregowy mechanizm odzyskiwania pa- miÚci, który jest uruchamiany opcjÈ wiersza poleceñ –XX:+UseSerialGC. Opcja -XX:+UseSerialGC (DefNew) moĝe byÊ równieĝ stosowana w poïÈczeniu z równoczesnym mechanizmem odzyskiwania pamiÚci starego pokolenia (CMS), co zapewnia jednowÈtkowe odzyskiwanie pamiÚci dla mïodego pokolenia. Obecnie mechanizm odzyskiwania pamiÚci G1, nad którym nadal trwajÈ prace, nie stosuje identyfikatora do identyfikacji danych wyjĂciowych w taki sposób, jak pozostaïe trzy me- chanizmy odzyskiwania pamiÚci. WartoĂÊ 99952K znajdujÈca siÚ po lewej stronie strzaïki - to zapeïnienie przestrzeni mïodego pokolenia przed uruchomieniem procesu odzyskiwania pamiÚci. WartoĂÊ 14688K po prawej stronie strzaïki - to zapeïnienie przestrzeni mïodego pokolenia po przeprowadzeniu procesu odzyski- wania pamiÚci. Przestrzeñ mïodego pokolenia podzielona jest na przestrzeñ zwanÈ edenem oraz dwie przestrzenie ocalaïych. Poniewaĝ po mniejszym odzyskiwaniu pamiÚci eden jest zawsze pusty, 14688K oznacza zapeïnienie przestrzeni ocalaïych. WartoĂÊ podana w nawiasach, czyli (109312K), to caïkowity rozmiar (nie myliÊ z zapeïnieniem) przestrzeni mïodego pokolenia, na którÈ skïada siÚ eden oraz dwie przestrzenie ocalaïych. W nastÚpnym wierszu listingu znajdujÈ siÚ wartoĂci 422212K- 341136K(764672K), które dostar- czajÈ informacji na temat wykorzystania sterty Java (ïÈczna zajÚtoĂÊ przestrzeni mïodego i starego pokolenia) przed odzyskiwaniem pamiÚci i po nim. Ponadto znajduje siÚ tu informacja o rozmiarze sterty Java, który jest równy sumie przestrzeni mïodego i starego pokolenia. WartoĂÊ 422212K po lewej stronie strzaïki to zajÚtoĂÊ sterty Java przed uruchomieniem procesu odzyskiwania pamiÚci, a wartoĂÊ 341136K po prawej stronie strzaïki to zajÚtoĂÊ sterty po przeprowadzeniu procesu odzy- skiwania pamiÚci. UjÚta w nawiasach wartoĂÊ (764672K) to caïkowity rozmiar sterty Java. KorzystajÈc z uzyskanych informacji na temat rozmiaru przestrzeni mïodego pokolenia oraz rozmiaru sterty Java, moĝesz obliczyÊ rozmiar przestrzeni starego pokolenia. JeĂli przykïadowo rozmiar sterty Java wynosi 764672K, a rozmiar przestrzeni mïodego pokolenia jest równy 109312K, to rozmiar przestrzeni starego pokolenia wynosi 764672K - 109312K = 655360K. WartoĂÊ 0.0631991 secs okreĂla w sekundach czas trwania procesu odzyskiwania pamiÚci. Kolejny wiersz listingu [Times: user=0.06 sys=0.00, real=0.06 secs] to informacja na temat wykorzystania CPU oraz czasu, jaki upïynÈï. WartoĂÊ dla pola user to czas CPU wykorzystany przez mechanizm odzyskiwania pamiÚci na wykonanie instrukcji poza systemem operacyjnym. W tym przykïadzie mechanizm odzyskiwania pamiÚci wykorzystaï 0,06 s czasu uĝytkownika dla CPU. WartoĂÊ dla pola sys to czas CPU wykorzystany przez system operacyjny na obsïugÚ mechanizmu odzyskiwania pamiÚci. W naszym przykïadzie mechanizm odzyskiwania pamiÚci w ogóle nie wykorzystaï czasu CPU na wykonanie instrukcji systemu operacyjnego. WartoĂÊ dla pola real to podany w sekundach czas, jaki upïynÈï od momentu rozpoczÚcia do momentu zakoñczenia pro- cesu odzyskiwania pamiÚci. W tym przypadku zajÚïo to 0,06 s. Czasy dla user, sys i real sÈ za- okrÈglane do setnych sekundy. W poniĝszym przykïadzie przedstawiono listing z opcji -XX:+PrintGCDetails dla procesu peïnego odzyskiwania pamiÚci. Dla lepszej przejrzystoĂci listing zostaï podzielony na kilka wierszy. [Full GC [PSYoungGen: 11456K- 0K(110400K)] [PSOldGen: 651536K- 58466K(655360K)] 662992K- 58466K(765760K) [PSPermGen: 10191K- 10191K(22528K)], 1.1178951 secs] [Times: user=1.01 sys=0.00, real=1.12 secs] 122 Rozdziaá 4. Monitorowanie wydajnoĞci maszyny wirtualnej Javy Nagïówek Full GC wskazuje, ĝe mamy do czynienia z peïnym odzyskiwaniem pamiÚci. [PSYoung ´Gen: 11456K- 0K(110400K)] oznacza to samo, co w przypadku opisanego wczeĂniej mniejszego odzyskiwania pamiÚci. Wiersz [PSOldGen: 651536K- 58466K(655360K)] dostarcza informacji na temat przestrzeni sta- rego pokolenia. PSOldGen oznacza, ĝe stosowany mechanizm odzyskiwania pamiÚci dla starego pokolenia jest wielowÈtkowym procesem przepustowoĂciowego mechanizmu odzyskiwania pamiÚci wïÈczonego opcjÈ wiersza poleceñ XX:+UseParallelOldGC. WartoĂÊ 651536K po lewej stronie strzaïki to zapeïnienie przestrzeni starego pokolenia przed uruchomieniem odzyskiwania pamiÚci, a wartoĂÊ 58466K po prawej stronie strzaïki to zapeïnienie tej przestrzeni po zakoñczeniu procesu odzyskiwania pamiÚci. UjÚta w nawiasach wartoĂÊ (655360K) to rozmiar przestrzeni starego po- kolenia. Wiersz 662992K- 58466K(765760K) informuje o wykorzystaniu sterty Java. Jest tu podane ïÈczne zapeïnienie przestrzeni mïodego i starego pokolenia przed wykonaniem i po wykonaniu odzy- skiwania pamiÚci. WartoĂÊ po prawej stronie strzaïki moĝe byÊ równieĝ traktowana jako iloĂÊ ĝywych obiektów, które pozostaïy w aplikacji po przeprowadzeniu peïnego odzyskiwania pamiÚ- ci. Posiadanie informacji o iloĂci ĝywych obiektów w aplikacji, szczególnie kiedy aplikacja jest w stanie równowagi, jest istotne przy ustalaniu rozmiaru sterty Java maszyny wirtualnej oraz do- stosowywaniu ustawieñ mechanizmu odzyskiwania pamiÚci w JVM. Kolejny wiersz [PSPermGen: 10191K- 10191K(22528K)] zawiera dane dotyczÈce przestrzeni staïego pokolenia. PSPermGen oznacza, ĝe stosowany mechanizm odzyskiwania pamiÚci dla staïego pokolenia jest wielowÈtkowym procesem przepustowoĂciowego mechanizmu odzyskiwania pamiÚci uruchomionego opcjÈ wiersza poleceñ -XX:+UseParallelGC lub -XX:+UseParallelOldGC. WartoĂÊ 10191K znajdujÈca siÚ po lewej stronie strzaïki okreĂla zapeïnienie przestrzeni staïego pokolenia przed uruchomieniem procesu odzyskiwania pamiÚci, a wartoĂÊ 10191K znajdujÈca siÚ po prawej stronie strzaïki to zapeïnienie tej przestrzeni po zakoñczeniu pracy przez mechanizm odzyski- wania pamiÚci. UjÚta w nawiasach wartoĂÊ (22528K) to rozmiar przestrzeni staïego pokolenia. W peïnym odzyskiwaniu pamiÚci istotne jest, by zwróciÊ uwagÚ na to, jaka czÚĂÊ stery jest zajÚta przez przestrzenie starego i staïego pokolenia przed uruchomieniem mechanizmu odzyskiwania pamiÚci. Powodem tego jest fakt, ĝe peïne odzyskiwanie pamiÚci moĝe byÊ uruchamiane w przy- padku zbliĝania siÚ limitu zapeïnienia zarówno dla przestrzeni starego, jak i staïego pokolenia. Z na- szego listingu wynika, ĝe zapeïnienie przestrzeni starego pokolenia przed odzyskiwaniem pamiÚci (651536K) jest bliskie caïkowitemu rozmiarowi tej przestrzeni (655360K). Z kolei zapeïnienie prze- strzeni staïego pokolenia przed odzyskiwaniem pamiÚci (10191K) nie jest nawet blisko caïkowi- tego rozmiaru tej przestrzeni (22528K). StÈd teĝ wiemy, ĝe uruchomienie peïnego odzyskiwania pa- miÚci zostaïo spowodowane osiÈgniÚciem limitu zapeïnienia przestrzeni starego pokolenia. WartoĂÊ 1.1178951 secs okreĂla w sekundach czas trwania procesu odzyskiwania pamiÚci. Wiersz [Times: user=1.01 sys=0.00, real=1.12 secs] dostarcza informacji na temat wyko- rzystania CPU i czasu, jaki upïynÈï. Jego znaczenie jest takie samo, jak w przypadku opisanego wczeĂniej procesu mniejszego odzyskiwania pamiÚci. Przy zastosowaniu równoczesnego mechanizmu odzyskiwania pamiÚci (CMS) listing dla opcji -XX:+PrintGCDetails nieco siÚ róĝni, szczególnie w przypadku raportowania danych dotyczÈcych przewaĝnie-równoczesnego odzyskiwania pamiÚci dla starego pokolenia. Równoczesny mechanizm odzyskiwania pamiÚci (CMS) uruchamiany jest opcjÈ wiersza poleceñ -XX:+UseConcMarkSweepGC. Uruchamia on równieĝ automatycznie opcjÚ -XX:+UseParNewGC, czyli wielowÈtkowe odzyskiwanie pamiÚci dla mïodego pokolenia. Poniĝej znajduje siÚ przykïad dla mniejszego odzyskiwania pa- miÚci wykorzystujÈcego równoczesny mechanizm odzyskiwania pamiÚci CMS: Odzyskiwanie pamiĊci 123 [GC [ParNew: 2112K- 64K(2112K), 0.0837052 secs] 16103K- 15476K(773376K), 0.0838519 secs] [Times: user=0.02 sys=0.00, real=0.08 secs] Listing z mniejszego odzyskiwania pamiÚci dla równoczesnego mechanizmu odzyskiwania pamiÚci jest zbliĝony do listingu z mniejszego odzyskiwania pamiÚci dla przepustowoĂciowego me- chanizmu odzyskiwania pamiÚci. Aby zapewniÊ kompleksowoĂÊ informacji, zostaï on opisany poniĝej. Nagïówek GC wskazuje, ĝe mamy do czynienia z mniejszym odzyskiwaniem pamiÚci. Wiersz [ParNew: 2112K- 64K(2112K)] zawiera informacje na temat przestrzeni mïodego pokolenia. ParNew wskazuje, ĝe stosowane odzyskiwanie pamiÚci dla mïodego pokolenia jest wielowÈtkowym pro- cesem równoczesnego mechanizmu odzyskiwania pamiÚci CMS. JeĂli zostaïoby zdefiniowane uĝycie z CMS szeregowego odzyskiwania pamiÚci dla mïodego pokolenia, mielibyĂmy oznaczenie DefNew. WartoĂÊ 2112K znajdujÈca siÚ po lewej stronie strzaïki okreĂla zapeïnienie przestrzeni mïode- go pokolenia przed uruchomieniem mechanizmu odzyskiwania pamiÚci, a wartoĂÊ 64K po prawej stronie strzaïki oznacza zapeïnienie tej przestrzeni po zakoñczeniu dziaïania mechanizmu odzy- skiwania pamiÚci. Przestrzeñ mïodego pokolenia dzieli siÚ na eden oraz dwie przestrzenie ocala- ïych. Poniewaĝ eden zawsze pozostaje pusty po mniejszym odzyskiwaniu pamiÚci, 64K oznacza za- peïnienie przestrzeni ocalaïych. UjÚta w nawiasach wartoĂÊ (2112K) jest rozmiarem przestrzeni mïodego pokolenia, na którÈ skïada siÚ eden i dwie przestrzenie ocalaïych. 0.0837052 secs to wy- raĝony w sekundach czas, jaki byï potrzebny na usuniÚcie nieosiÈgalnych obiektów z przestrzeni mïodego pokolenia. Kolejny wiersz listingu — 16103K- 15476K(773376K) — przedstawia dane na temat wykorzy- stania sterty Java (ïÈczne zapeïnienie przestrzenie mïodego i starego pokolenia) przed wykonaniem i po wykonaniu procesu odzyskiwania pamiÚci. Ponadto dostarcza równieĝ informacji dotyczÈcej rozmiaru sterty Java, która jest równa sumie rozmiarów przestrzeni mïodego i starego pokolenia. WartoĂÊ 16103K znajdujÈca siÚ po lewej stronie strzaïki oznacza zapeïnienie sterty Java przed uru- chomieniem mechanizmu odzyskiwania pamiÚci, a wartoĂÊ 15476K po prawej stronie strzaïki ozna- cza zapeïnienie sterty po zakoñczeniu dziaïania mechanizmu odzyskiwania pamiÚci. UjÚta w na- wiasach wartoĂÊ (773376K) stanowi caïkowity rozmiar sterty Java. KorzystajÈc z uzyskanych informacji na temat rozmiaru przestrz
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Wydajność Javy
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: