Garbage Collection unter .NET

Slides:



Advertisements
Ähnliche Präsentationen
DGC 1. 2 Motivation x new(x) delete(x) Speicher DGC 3 Inhalt Einführung GC / DGC Der ideale DGC Algorithmen Zusammenfassung.
Advertisements

Dynamische Seiten mit Dreamweaver Zugriff auf (mysql) Datenbank mit PHP.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kurze Einführung in ASP
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Garbage Collection Maik Theisen Betreuer: Guido Tack
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Technik Gestaltung Navigation Daten. Übersicht Client Webbrowser InternetServer.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Introducing the .NET Framework
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
JDBC EDV JDBC.
Uwe Habermann Venelina Jordanova VFP Code in Silverlight Anwendungen ausführen.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
SQL Server 2005 CLR-Integration
Mark & Sweep Seminar Softwareentwicklung: Garbage Collection Eva Schartner.
Java Garbage Collection Angelika Kusel, Überblick Was ist Garbage Collection? Vor- und Nachteile von GC GC-Algorithmen/Verfahren Java Garbage.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 13 Kapitel 2 Folie 2 ASP.NET HTTP-Handler (1)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Beschreiben Sie eine Web Interaktion mittels Java Applets.
CGI (Common Gateway Interface)
DIE TROJANER Benjamin Leu & Joel Dietschi.
Thread Synchronisation in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Parameterübergabemechanismen für den Methodenaufruf
Mark – Compact GC & Performancemessungen Bernhard Prügl,
EPROG Tutorium #3 Philipp Effenberger
Thomas Negeli | Reference Counting I Folie 1 / 20 Seminar Garbage Collection | WS2005 Reference Counting I Negeli Thomas.
Die Idee hinter Copying Garbage Collection (1) Aufteilung des Heaps in zwei Teile: To-Space und From-Space Nutzung eines Teiles durch das Programm Ist.
Seminar aus Softwareentwicklung
JOMP
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Die AppDomain Das unbekannte Wesen?
early binding (frühe Bindung) late binding (späte Bindung)
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
A Workshop About this chapter General description Units Time Schedule
Java-Kurs Übung Besprechung der Hausaufgabe
5 Memory Leaks, die auch in Ihrer.NET Anwendung sein könnten André Krämer Softwareentwickler, Trainer, Berater.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
© 2016 TravelTainment Einführung in die Garbage Collection Seminarvortrag Lars Frauenrath 1.
Dr. Wolfram Amme, Automatische Speicherverwaltung, Informatik II, FSU Jena, SS Automatische Speicherverwaltung.
Zwei Denkansätze zur Klasse Schlange
Implementieren von Klassen
OneDrive ist Ihr persönlicher Arbeitsspeicher, der Sie mit Dateien in Office 365 verbindet. Arbeiten Sie mit anderen in Echtzeit zusammen, greifen Sie.
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Garbage Collection unter .NET Optimierung Finalization Resurrection

Vorteile von Garbage Collection Kein explizites Freigeben von Speicher Beseitigung möglicher Fehlerquellen Keine Fragmentierung des Heaps Performance-Vorteil Garantierte „locality of reference“ bei Erzeugung Durch Verdichtung des Heaps rücken langlebige Objekte zusammen

Mark & Compact Markieren aller erreichbaren Objekte, Entfernen aller nicht markierten

Mark & Compact Verdichtung des Heaps, Neuberechnung der Zeiger (auch members)

Optimierung durch Generationen Für die meisten Applikationen gilt: Je neuer ein Objekt, desto kürzer die Lebenszeit, und je älter, desto länger wird die Lebenszeit sein Neuere Objekte haben stärkere Beziehungen untereinander und werden öfter verwendet Und: Teile des Heaps zu bearbeiten ist effizienter als den gesamten zu verdichten Optimierung durch differenzierte Behandlung von Objekten unterschiedlichen Alters

Generationen Neue Objekte sind „Generation 0“ Objekte, die einen GC-Lauf überleben, erreichen die nächsthöhere Generation

Generationen: Performance GC kann Freigabe auf Generation 0 beschränken Da neuere Objekte meist kurze Lebensdauer haben, wird in Gen. 0 meist mehr Speicher freigegeben als in den anderen Beschränkung der Mark-Traversierung Innere Referenzen werden nur verfolgt bei neuen Objekten alten Objekte, auf die seit der letzen Collection geschrieben wurde

Multi-Threading Wenn GC eine Collection starten will, müssen alle Threads angehalten werden Mechanismen Fully interruptible code Safe Points (vom JITC in Code eingefügt) Für unmanaged code „Hijacking“ um Thread anzuhalten Thread kann während Collection weiterlaufen „pinned objects“ erforderlich

Finalization Ressourcen müssen freigegeben werden GC vergibt Speicher, gibt ihn wieder frei aber nicht möglich für unbekannte Ressourcen Netzwerkverbindungen Dateihandles Datenbanken, etc. Objekt kann durch Finalization Ressourcen freigeben, wenn es durch GC entfernt wird

Finalization – Code Beispiel Public class NetworkObj { NetworkResource res; Public NetworkObj() { res = new NetworkResource(); } ... ~NetworkObj() { res.close();

Finalization: Behandlung Enthält ein Objekt eine Finalize-Methode, wird ein Zeiger auf das Objekt in die Finalization Queue gestellt (bei Erzeugung des Objekts)

Finalization: Behandlung Wird ein Objekt als Garbage betrachtet, und befindet sich ein Zeiger darauf im Fin.-Queue, wird dieser in den „F-reachable Queue“ kopiert

Finalization: Behandlung Objekte im F-reachable Queue können noch NICHT freigegeben werden, da erst ihre Finalize-Methode aufgerufen werden muß

Finalization: Behandlung Separater Thread wird gestartet, der die Objekte im F-reachable Queue abarbeitet Objekte können erst im nächsten GC-Lauf tatsächlich freigegeben werden!

Finalization Nachteile Erzeugung von Objekten mit Finalize-Methode dauert länger Freigabe dauert länger (Aufrufe der Methoden erforderlich) Speicher wird nicht sofort freigegeben Ist kein (deterministischer) Destruktor Darf nicht direkt aufgerufen werden Zeitpunkt und Reihenfolge der Ausführung sind willkürlich Nur verwenden wenn wirklich nötig

Dispose Die meisten Ressourcen wollen möglichst früh wieder freigegeben werden Unteilbare Ressourcen (z.B. Datei) können durch die Nicht-Vorhersagbarkeit des Freigabe-Zeitpunktes problematisch sein Lösung: (manuell aufrufbare) Freigabe-Methode Finalize als Backup

Dispose In der Dispose-Methode kann durch System.GC.SuppressFinalize(this); der Zeiger aus dem Finalization Queue entfernt werden, Finalize wird nicht aufgerufen Vorteile: Wird explizit Dispose() aufgerufen (Normalfall), wird das Freigeben effizienter Wird vergessen, gibt der GC die Ressourcen frei

Resurrection F-reachable Queue Zeiger werden als Wurzelzeiger aufgefaßt D.h. das Objekt ist tot, wird in den Queue verschoben und lebt wieder bis zur nächsten Collection (der Zeiger ist dann entfernt) Objekt kann in Finalize eine globale oder statische Referenz auf sich selbst erzeugen wird „resurrected“, da wieder erreichbar Allerdings wird Finalize das nächste Mal nicht mehr ausgeführt

Resurrection Nutzen von Resurrection z.B. für Objekt-Pool hilfreich für Objekte mit zeitintensiven Konstruktoren (z.B. Datenbankverbindung) Im Normalfall nicht verwenden, da schwer zu durchschauen

WeakReference Direkte Referenzen sind „strong references“ „weak references“ für Objekte, die man später zwar wieder braucht, die das System aber bei Bedarf freigeben darf sr = new SomeObject(); WeakReference wr = new WeakReference(sr); sr = null; ... sr = (SomeObject)wr.Target; if (sr==null) sr = new SomeObject();

Direkte Interaktion mit dem GC System.GC.Collect(); System.GC.Collect(int generation); System.GC.GetGeneration(object); System.GC.GetTotalMemory(); System.GC.KeepAlive(object); System.GC.SuppressFinalize(object); System.GC.ReRegisterForFinalize(object); System.GC.WaitForPendingFinalizers();

Literatur http://msdn.microsoft.com/library/default.asp?url=/msdnmag/issues/1100/GCI/TOC.ASP http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx Kevin Burton: .NET Common Language Runtime Unleashed, Sams Publishing 2002 Dave Stutz, Ted Neward, Geoff Shilling: Shared Source CLI Essentials. O'Reilly 2003