Správa paměti na platformě Java. Ladislav Thon

Podobné dokumenty
Uklízení odpadků a analýza úniku

Profiling v Javě. Základy testování výkonnosti aplikací a hledání problematických míst. Richard Lipka

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Profiling v Javě. Základy testování výkonnosti aplikací a hledání problematických míst. Richard Lipka

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Správa paměti. Ing. Marek Běhálek katedra informatiky FEI VŠB-TUO A-1018 / marek.behalek@vsb.

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Správa paměti. Ing. Marek Běhálek katedra informatiky FEI VŠB-TUO A-1018 /

Struktura programu v době běhu

Správa paměti. Správa paměti. (c)marek Běhálek, Katedra informatiky FEI VŠB-TU Ostrava 1. Motivace. Úrovně správy paměti. Obsah přednášky.

Programování v C++ 2, 4. cvičení

Abstraktní datové typy: zásobník

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Matematika v programovacích

IUJCE 07/08 Přednáška č. 6

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

PB161 Programování v jazyce C++ Přednáška 4

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

NMIN102 Programování /2 Z, Zk

09. Memory management. ZOS 2006, L.Pešička

PB161 Programování v jazyce C++ Přednáška 5

Úvod do programování v jazyce Java

přetížení operátorů (o)

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Programování v Javě I. Únor 2009

1 Nejkratší cesta grafem

PB161 Programování v jazyce C++ Přednáška 4

TÉMATICKÝ OKRUH Softwarové inženýrství

Programování v Javě I. Leden 2008

Principy objektově orientovaného programování

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Jakub Čermák Microsoft Student Partner

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Procesy a vlákna (Processes and Threads)

Více o konstruktorech a destruktorech

bfs, dfs, fronta, zásobník, prioritní fronta, halda

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Konstruktory a destruktory

Java Managenent Extension JMX

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

O Apache Derby detailněji. Hynek Mlnařík

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

java remote method invocation Kateřina Fricková, Matouš Jandek

Návrh softwarových systém. Návrh softwarových systémů

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod do programovacích jazyků (Java)

Generické programování

Implementace numerických metod v jazyce C a Python

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Dědění, polymorfismus

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

JVM TOOL INTERFACE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS

Programovací jazyk Java

Jazyk C# (seminář 6)

Programování v C++ VI

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Výčtový typ strana 67

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

PB161 Programování v jazyce C++ Přednáška 5

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Teoretické minimum z PJV

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

FIREBIRD relační databázový systém. Tomáš Svoboda

Úvod. Leden Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 22

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Při překrývání se využívá toho, že ne všechny moduly programu jsou vyžadovány současně. Jakmile skončí využívání jednoho

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Tvorba informačních systémů

Anotace. Pointery. Martin Pergel,

6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

JAVA Unit testing Java, zimní semestr

Základy programování (IZP)

Operační systémy. Přednáška 8: Správa paměti II

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Operační systémy. Správa paměti (SP) Požadavky na SP. Spojování a zavedení programu. Spojování programu (linking) Zavádění programu (loading)

Objektově orientované programování

Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, Ostrava-Poruba, Česká republika

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Kapitola 10: Diskové a souborové struktury. Klasifikace fyzických médií. Fyzická média

2011 Jan Janoušek BI-PJP. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

RMI Remote Method Invocation

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

PREPROCESOR POKRAČOVÁNÍ

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

TECHNOLOGIE RTSJ A JEJÍ UPLATNĚNÍ PŘI TVORBĚ APLIKAČNÍ A PREZENTAČNÍ VRSTVY PORTÁLOVÝCH ŘEŠENÍ

Transkript:

Správa paměti na platformě Java Ladislav Thon 1

Obsah 1. závěr 2. JVM a paměť 3. sledování a ovlivňování 4. problémy a jejich řešení Upozornění: Sun JVM 5.0 only! Ostatní implementace (IBM, Bea) se liší. 2

Není pravda, že v Javě se nemusíme starat o paměť! Lépe: nemusíme se starat o paměť, ale musíme se starat o objekty! 3

Jinak 4

Struktura paměti I. JVM je zásobníkový (stack) stroj každé vlákno jeden zásobník každé volání metody jeden aktivační záznam (frame) každý frame: parametry metody lokální proměnné atd. 5

Struktura paměti II. pole a objekty se alokují na heapu omezená velikost! referenční typy automatická správa paměti alokace (konstruktor) finalizace (žádné destruktory) GC 6

Struktura paměti III. Perm Space vždy platné objekty (permanent) objekty dynamického typového systému java.lang.class java.lang.reflect.method řetězcové konstanty java.lang.string.intern() interní paměť JVM: cache JIT překladače, 7

Garbage collection I. odstraňování nepotřebných objektů z heapu GC hledá dosažitelné objekty prohledávání z kořenových objektů kořenové objekty vždy dosažitelné: reference na zásobníku reference ve statických proměnných všechny ostatní může uvolnit lokalita fragmentace 8

Garbage collection II. řada různých přístupů: (počítání referencí) mark and sweep GC kopírovací GC generační princip atd. JVM je kombinuje 9

GC v Javě I. Struktura heapu: Survivor Eden Space Space 1 Survivor Space 2 Tenured Space Young Gen Old Gen 10

GC v Javě II. generační princip (2 generace) většina objektů má krátkou životnost objekty, které přežijí jistý počet GC, přesunuty do Tenured Space minor collection pouze Young Gen kopírovací algoritmus major (full) collection pro Old Gen mark and sweep algoritmus 11

GC v Javě III. sériový GC (default): všechna vlákna pozastavena, GC vykonáván jedním vláknem na jednom procesoru paralelní GC (default na serverech): všechna vlákna pozastavena, GC Young Gen vykonáván více vlákny na více procesorech pro Old Gen sériový GC lze paralelní GC i pro Old Gen 12

GC v Javě IV. konkurenční GC pro Young Gen paralelní GC pro Old Gen GC, který běží paralelně s běžnými vlákny aplikace pozastavena pouze ve dvou místech algoritmu musí začít dřív, než dojde paměť! vlákno GC zabere jeden procesor jen pro sebe inkrementální GC (obsolete) konkurenční GC, který se občas vzdá procesorového času ve prospěch vláken aplikace 13

Sledování správy paměti I. offline sledování logy -verbose:gc (-Xloggc:<file>) -XX:+PrintGCTimeStamps -XX:+PrintGCDetails + další jinfo nastavení logování za běhu od Javy 6 vizualizace z logů http://www.tagtraum.com/gcviewer.html 14

Sledování správy paměti II. on-line sledování konzolové utility jps seznam javovských procesů jstack seznam vláken + jejich stacktrace jmap informace o heapu (blokující!) jstat různé statistiky, zejm. o paměti a GC grafické nástroje jconsole JMX konzole, mj. i sledování paměti profilery NetBeans Profiler, VisualVM, overhead 15

Ovlivňování správy paměti I. můžeme potřebovat: změnit velikost dostupné paměti vysoké nároky (algoritmy? cache?) problémy (aplikace? knihovny?) změnit chování GC běžný GC aplikace zamrzne obvykle max. stovky milisekund ale i 10 minut! (velký heap, swap) 16

Ovlivňování správy paměti II. základní parametry: -Xmx1000M maximální velikost heapu -Xms500M velikost heapu po spuštění dále: -Xmn100M velikost Young Gen -XX:MaxPermSize=200M velikost Perm Gen lze nastavit velikost všech oblastí paměti i zásobníku 17

Ovlivňování správy paměti III. výběr GC: -XX:+UseParallelGC paralelní -XX:+UseParallelOldGC -XX:+UseConcMarkSweepGC konkurenční -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 detailní možnosti ladění chování GC 18

Paměťové problémy I. class MyServlet extends HttpServlet { static List<HttpServletRequest> processedrequests = new ArrayList<HttpServletRequest>(); } protected void doget(httpservletrequest request, HttpServletResponse response) {... processedrequests.add(request); } To se stává i v lepších rodinách 19

Paměťové problémy II. Connection conn =... Statement stmt = conn.createstatement(); ResultSet rs = stmt.executequery(...); while (rs.next()) {... } Rod Johnson: Using JDBC directly should be a sackable offence. 20

Paměťové problémy III. i v Javě existují memory leaky! memory leak = alokovaná, ale již zbytečná paměť, která nikdy neuvolněna v Javě spíše object leak dosažitelný objekt, který již zbytečný obvyklé projevy: java.lang.outofmemoryerror :-( přesčas 21

Paměťové problémy IV. OutOfMemoryError chybí stacktrace! až od Javy 6 heapdump snímek paměti (heapu) v určitém okamžiku při OOM: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/ladicek/dumps 22

Paměťové problémy V. heapdump na vyžádání: -XX:+HeapDumpOnCtrlBreak podle zvěstí nejnovější revize Javy 1.4.2, 5 a 6 ale ještě jsem takovou neviděl :-? jmap dump, JMX (jconsole) od Javy 6 lze získat i z coredumpu gcore 23

Paměťové problémy VI. analýza heapdumpu jhat VisualVM NetBeans Profiler SAP Memory Analyzer komerční profilery (?) 24

OutOfMemoryError: PermGen space class/classloader leak typicky po undeploynutí aplikace v kontejneru JDBC registrace JDBC driveru reference ze statické mapy v systémovém ClassLoaderu na třídu JDBC driveru v aplikačním ClassLoaderu cache introspekce java.beans.introspector.flushcaches() různé knihovny 25

Resumé I. pozor na statické kolekce! platí i pro singletony pečlivě uvolňovat externí zdroje nespoléhat na finalizaci čím dřív, tím líp občas se hodí slabé reference WeakHashMap nebo plnohodnotná cache 26

Resumé II. povinně logovat činnost GC povinně generovat heapdump při OOM rozumný analyzátor heapdumpu při ruce při řešení problémů nastávají jiné problémy 27

Out Of Memory dotázky? 28