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 All Objects born here Most die 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