VM Memory Management Thomas Nguyen 13.05.2009 1 VM Memory Management • Was ist Memory Management? • Was hat Garbage Collection mit Memory Management zu tun? • Wie funktioniert ein Garbage Collector? 2 Memory Management? • • • • Speicher ist begrenzt Lebenszyklus von Java Objekten Speicher zuordnen (allokieren) Speicher freigeben (deallokieren) Heikle Sache – nicht ungefährlich! 3 Architektur der Java-VM Quelle: http://www.artima.com/insidejvm/ed2/jvm2.html 4 Architektur der Java VM Method Area CLASS A Constant Pool Class B Class A Fields Methods Attributes 5 Architektur der Java-VM Java VM – STACKS STACK FRAME 3… STACK FRAME 2 STACK FRAME 1 STACK FRAME 1 Lokale Variablen Operanden Stack RCP Referenz 6 HEAP • Dynamischer Speicher • Mit „New“ angelegte JAVA Objekte liegen hier • New“ reserviert den benötigten Speicherplatz, Adresse wird als Referenz zurückgegeben • Sind über Referenzen zugänglich (auf dem Stack) • Zusammenhängender Speicherbereich • Speicher ist ein Array von Bytes mit Adressen … 1 2 3 4 5 6 7 7 Runtime Data Area´s … HEAP STACK … ptr to class data information instance data instance data ptr to class data information instance data MyObject object1; object1 = new MyObject(); Object reference ptr into heap ptr into heap … Method Area Class Data MyObject Class Data Class Myobject Extends java/lang/object toString(); hashCode() 8 Fast Allocation HEAP … • Bump Pointer MyObject object; object = new MyObject; Nächste freie Speicheradresse object … STACK … 9 Architektur der Java-VM Quelle: http://www.artima.com/insidejvm/ed2/jvm2.html 10 Garbage Collection? • Garbage Collection ist ein Begriff für die automatisierte Speicherverwaltung (Freispeicherverwaltung) • Garbage Collector versucht Garbage (Müll) zu entsorgen Garbage = Objekte, die nicht mehr vom Programm benötigt werden 11 Garbage Collection • JVM hat das Rad nicht neu erfunden • Findet auch Anwendung bei vielen andern Sprachen – Lisp (1959) – Smalltalk – Scheme – Objective C – C# –… 12 Vor- und Nachteile einer Garbage Collection • Vorteile: – Erhöhte Zuverlässigkeit – Entkopplung der Speicherverwaltung vom Klassenund Interface Design – Keine Entwicklungszeit um Memory Management Fehler aufzuspüren!!! • Nachteile: – CPU Zeit – Overhead – Pausen 13 Anforderungen an eine Garbage Collection (SUN) • • • • safe and comprehensive efficiently without introducing long pauses limitation of fragmentation scalability 14 GARBAGE COLLECTION Grundlagen • Java virtual machine (JVM) hat verborgene Datenstrukturen, um Speicher zu verwalten • Root: Referenzen, auf die ein Programm direkten Zugriff hat – lokale Variablen auf einem Stack – static Variablen 15 Objekte: live & garbage • Ein Objekt, welches unser Programm möglicherweise noch braucht, nennt sich „lebend“ • Gegenteil von lebend ist garbage, Objekte die unser Programm nicht mehr referenzieren kann Objekt ist „lebend“ wenn, - eine Referenz durch ein Root besteht, oder - es eine Referenz durch ein anderes lebendes Objekt hat - es vom Root aus erreichbar ist 16 Erreichbarkeit von Objekten • Durchlaufe eine DFS (Tiefensuche) vom Root • Jedes Objekt hat ein „visited“ tag ROOT 17 Mark & Sweep Garbage Collection • 2 Phasen: – Mark Phase Startet DFS von jedem Root aus und markiert lebende Objekte – Sweep Phase Speicher wird von nicht markierten Objekten freigegeben ROOT 18 Compaction Fragmentierung: Freier Speicher hat die Tendenz sich in viele kleine Bereiche aufzusplitten. Objekt Objekt Objekt Objekt Objekt Objekt Objekt Objekt 19 Mark & Compact Collector • Zunächst wie der Mark&Sweep Alogrithmus • Compacting GC bewegt die Objekte während der Sweep Phase Mark Phase Kompaktifiziert ROOT 20 Speicherverwaltung … HEAP instance data instance data STACK … ptr to class data MyObject object1; Object1 = new MyObject(); ptr to class data ptr into heap instance data ptr into heap Object reference … Method Area Class Data MyObject Class Data Class Myobject Extends java/lang/object toString(); hashCode() 21 Referenzen • In der SUN Java-VM (Java JDK1.2.2) ist eine Referenzen kein Pointer. Es ist ein „Handle“ • Ein Handle ist ein Pointer zu einem anderen Pointer STACK Handles HEAP ptr 22 Referenzen • Diese „second“ Pointer befinden sich in einer separaten Tabelle HEAP STACK Handle Pool object ptr object 23 Copying Garbage Collector • Speicher ist in 2 Bereiche aufgeteilt: – Old Space – New Space • • • Finde lebende Objekte mittels DFS Wenn es lebende Objekte im Old Space findet, wird es unverzüglich ins New Space bewegt Die Objekte werden im New Space in den bestmöglichen Speicherplatz bewegt Beim nächsten GC werden Old und New-Space vertauscht ROOT ROOT 24 Old Space New Space Copying Garbage Collector Schneller als M&S, da nur eine Phase Vorteil: Geschwindigkeit Nachteil: Halbierung des Speichers 25 Generational Garbage Collector • Die meisten Objekte haben einen kurzen Lebenszyklus • Aber einige Objekte leben länger • Gernerational Collectors haben 2 oder mehr Generations – Können eine unterschiedliche Größe haben – Größe kann variiert werden 26 Generational Garbage Collector Old generation – Mark & Sweep GC (infrequently) Young generation – Copying GC (frequently) tenured Survivor Spaces Survivor Spaces Eden full EDEN EDEN All AllObjects Objectsborn bornhere here Most Mostdie diehere here 27 Aktionszeiten des Garbage Collectors • Garbage Collector läuft, wenn zu wenig Speicher zur Verfügung steht (low Memory) • System zur Zeit ungenutzt (idle) • Zu einer beliebigen Zeit • Explizit vom Programm aufgerufen – System.gc(); • Keine Garantie für das Beenden eines Objektes • Daher sollte man beim Entwurf sich nicht darauf verlassen!!! 28 Auswahl eines Garbage Collectors • Auswahl anhand folgender Ziele: – Pause Zeiten – Durchsatz – Header-Größe • Serial Collector – Default Collector – XX:+UseSerialGC • Parallel Collector – Multiprozessor optimiert – XX:+UseParallelGC • Conccurent Collector – Echzeitanwendungen – XX:+UseParallelOldGC 29 Anforderungen an eine Garbage Collection (SUN) • safe and comprehensive – Mark & Sweep / Copying GC • efficiently without introducing long pauses – Generational GC -> Serial/ Parallel/ Concurrent GC • limitation of fragmentation – Copying GC / Bump Pointer • scalability – Verteilung auf mehrere Threats (Parallel/ Concurrent GC) 30 Tuning des SUN JVM Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html Per Kommando-Zeilen Befehle: • Informationen über HEAP und GC – verbose:gc • Verhältnis zwischen Young Generation und Old Generation – XX:NewRatio=3 • Verhältnis zwischen Survivor Spaces und Eden – XX:SurvivorRatio=6 • Heap Größe festlegen – java -Xms32m -Xmx128m MyClassName 31 Literatur & Quellen • • • • • Richard Jones & Rafael Lins Garbage Collection: Algorithms for Automatic Dynamic Memory Management John Wiley & Sons, New York, 1996 Garbage Collection in the Java HotSpot Virtual Machine http://www.devx.com/Java/Article/21977 Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html Java™ Virtual Machines http://java.sun.com/j2se/1.5.0/docs/guide/vm/index.html Java's garbage-collected heap http://www.javaworld.com/javaworld/jw-08-1996/jw-08-gc.html Chapter 5 of Inside the Java Virtual Machine http://www.artima.com/insidejvm/ed2/jvm.html 32 Rückblick • Speicherdarstellung in einer Java VM – Heap, Stack, Method Area • Speicher Allokation / Deallokation – „NEW“ Konstruktur, Referenzen • Automatische Speicherbereinigung – Garbage Collection • 2 Verfahren kennen gelernt – Mark & Sweep Collector – Copying Collector • 3 verschiedene Garbage Collectoren in SUN´s JVM – Serial, Parallel & Concurrent Collector Gut, dass es eine Garbage Collection gibt, oder ? 33