1 VM Memory Management Thomas Nguyen 13.05.2009. 2 VM Memory Management Was ist Memory Management?...

Post on 05-Apr-2015

108 views 0 download

Transcript of 1 VM Memory Management Thomas Nguyen 13.05.2009. 2 VM Memory Management Was ist Memory Management?...

1

VM Memory Management

Thomas Nguyen

13.05.2009

2

VM Memory Management

• Was ist Memory Management?• Was hat Garbage Collection mit Memory Management

zu tun?• Wie funktioniert ein Garbage Collector?

3

Memory Management?

• Speicher ist begrenzt• Lebenszyklus von Java Objekten• Speicher zuordnen (allokieren) • Speicher freigeben (deallokieren)

Heikle Sache – nicht ungefährlich!

4

Architektur der Java-VM

Quelle: http://www.artima.com/insidejvm/ed2/jvm2.html

5

Architektur der Java VM

Method Area

CLASS A

Constant Pool

Fields

Methods

Attributes

Class B

Class A

6

Java VM – STACKS

STACK FRAME 1

Lokale Variablen Operanden Stack RCP Referenz

STACK FRAME 3…STACK FRAME 2

STACK FRAME 1

Architektur der Java-VM

7

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

8

HEAP

Runtime Data Area´s

ptr into heap

ptr into heap

MyObject object1;object1 = new MyObject();

ptr to class data

instance datainstance data

instance data

Method Area Class Data MyObject

Class Data

Class MyobjectExtends java/lang/object

toString();hashCode()

STACKObject reference

informationptr to class data information

ptr to class data information

9

Fast Allocation

• Bump Pointer …

Nächste freie Speicheradresse

MyObject object;object = new MyObject;

STACK

HEAP

object

10

Architektur der Java-VM

Quelle: http://www.artima.com/insidejvm/ed2/jvm2.html

11

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

12

Garbage Collection

• JVM hat das Rad nicht neu erfunden• Findet auch Anwendung bei vielen andern Sprachen

– Lisp (1959)– Smalltalk– Scheme– Objective C– C#– …

13

Vor- und Nachteile einer Garbage Collection

• Vorteile:– Erhöhte Zuverlässigkeit– Entkopplung der Speicherverwaltung vom Klassen-

und Interface Design– Keine Entwicklungszeit um Memory Management

Fehler aufzuspüren!!!• Nachteile:

– CPU Zeit– Overhead– Pausen

14

Anforderungen an eine Garbage Collection (SUN)

• safe and comprehensive

• efficiently without introducing long pauses

• limitation of fragmentation

• scalability

15

GARBAGE COLLECTIONGrundlagen

• 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

16

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

17

Erreichbarkeit von Objekten

• Durchlaufe eine DFS (Tiefensuche) vom Root• Jedes Objekt hat ein „visited“ tag

ROOT

18

Mark & Sweep Garbage Collection• 2 Phasen:

– Mark Phase Startet DFS von jedem Root ausund markiert lebende Objekte

– Sweep Phase Speicher wird von nicht markierten Objekten freigegeben

ROOT

19

Compaction

Fragmentierung: Freier Speicher hat die Tendenz sich in viele kleine Bereiche aufzusplitten.

Objekt Objekt Objekt

ObjektObjekt Objekt

Objekt

Objekt

20

Mark & Compact Collector

• Zunächst wie der Mark&Sweep Alogrithmus• Compacting GC bewegt die Objekte während der Sweep

Phase

ROOT

Mark Phase Kompaktifiziert

21

HEAP

Speicherverwaltung

ptr into heap

ptr into heap

MyObject object1;Object1 = new MyObject();

ptr to class datainstance datainstance data

ptr to class datainstance data

Method Area Class Data MyObject

Class Data

Class MyobjectExtends java/lang/object

toString();hashCode()

STACKObject reference

22

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

ptr

STACKHEAPHandles

23

HEAP

Referenzen

• Diese „second“ Pointer befinden sich in einer separaten Tabelle

object

ptr

object

STACKHandle Pool

24

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

Old Space New Space

25

Copying Garbage Collector

Schneller als M&S, da nur eine Phase

Vorteil: Geschwindigkeit

Nachteil: Halbierung des Speichers

26

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

27

Generational Garbage CollectorOld generation

– Mark & Sweep GC (infrequently)

Young generation – Copying GC (frequently)

Survivor Spaces

Survivor Spaces

Eden full

tenured

EDEN All Objects born hereMost die here

EDEN All Objects born hereMost die here

28

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

29

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

30

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)

31

Tuning des SUN JVM

Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuninghttp://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

32

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 Machinehttp://www.artima.com/insidejvm/ed2/jvm.html

33

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 ?