PPT

Werbung
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
Herunterladen