VM Memory Management

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