Patric Boscolo patbosc@microsoft.com Garbage Collection Patric Boscolo patbosc@microsoft.com.

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Microsoft Referenzarchitekturen- Infrastruktur für Connected Systems
Entwicklung und Einsatz von Smart Client-Anwendungen Jens Häupel Developer Evangelist Microsoft Deutschland GmbH Dirk Primbs.
Windows Vista Deployment
Windows Vista für Entwickler
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
DI Christian Donner cd (at) donners.com
Was ist neu in VS 2003 ? Ein Überblick. Bernd Marquardt Software & Consulting
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Steinbeis Forschungsinstitut für solare und zukunftsfähige thermische Energiesysteme Nobelstr. 15 D Stuttgart WP 4 Developing SEC.
Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2009/01/17 Graphics:
Peter Marwedel TU Dortmund, Informatik 12
Verteilte Software - Java - Prozedurale Programmierung 1
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Dipl. Inf. (FH) Paul Mizel Compilerbau.NET Compiler / Codegeneratoren / Skriptsprachen.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Objektorientierte Programmierung JDK-Klassenbibliothek
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 7 Strukturierte Ausnahmebehandlung (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Presenter: Daniel Walzenbach Technologieberater
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 9 Zeichenketten, Delegates und Events (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Munz – IT/TG - Lörrach. Goals of this intensive lecture To learn: To learn: –What does it means programming in Java ? –What is JAVA good/bad for ? –Which.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
VM Memory Management Thomas Nguyen
Frank Fischer Manager Evangelism and Marketing Microsoft Deutschland GmbH.
Microsoft Office Forms Server
Windows Vista für Entwickler: Microsoft.NET Framework 3.0 Nico Orschel Student Partner TU-Ilmenau.
Google App Engine Microsoft Windows Azure
Workshop WPF für Windows-Entwickler
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Test Driven Development - Romano Adler-
BAS5SE | Fachhochschule Hagenberg | Daniel Khan | S SPR5 MVC Plugin Development SPR6P.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Java und Eclipse.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
The free XML Editor for Windows COOKTOP Semistrukturierte Daten 1 Vortrag Semistrukturierte Daten 1 COOKTOP The free XML-Editor for Windows
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Your name Bedeutung von Internet- Technologien Gruppe 1 Andreas Feuerstein Philipp Hochratner Christian Weinzinger.
IT Pro Day Entwicklung und Betrieb näher zusammen dank System Center 2012 und Team Foundation Server 2012 Hansjörg Scherer ALM Spezialist, Microsoft Schweiz.
Neno Loje Berater & MVP für Visual Studio ALM und TFS (ehemals VSTS) Hochqualitative Produkte mit Visual Studio & TFS 2010.
| Basel Developing apps for SharePoint 2013 using Visual Studio 2013 René Modery, Office 365 MVP, 1stQuad Solutions.
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH.
Frank Fischer + Bernhard Frank Microsoft Deutschland GmbH.
Christian Binder Senior Platform Strategy Manager Microsoft
Roger Boesch Developer Technical Specialist Developer and Platform Group.
Quelle: Standish Group, 2006 Fourth Quarter Research Report, CHAOS Research Results.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
MVVM in Windows 8 und Windows Phone 8
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Linker & Loader in .NET August Steinbacher.
Equals, Hashcode und CompareTo Micha Kessler
Virtual Earth Visualisierung von Geodaten Daniel Walzenbach, Microsoft Deutschland GmbH
Windows Azure Training Modul: Windows Azure Media Services (4) Name des Referenten (Berufsbezeichnung)
Making people work together! Folie 1 NEXPLORE AG Stefan von Niederhäusern Einfache Anwendung der SuisseID durch das Software Development KIT
Primär(x)f(x)a[x]new typeof sizeof checked unchecked Unär+-~!++x--x x++ x-- (T)x Multip./Divis.*/% Addition/Subtr.+- shift > kleiner/größer = is gleich/ungleich==!=
© All rights reserved. Zend Technologies, Inc. Jenseits von var_dump(): Debugging in ZF Jan Burkl System Engineer.
Web Services in.NET und die.NET My Services 14. November Web Services in.NET und die.NET My Services Mario Ehrlicher Senior Consultant Xuccess
Die nächste Generation von Microsoft Office System 2007 Microsoft Office System Gernot Kühn Technologieberater Office System Mittelstandsbetreuung.
Common Language Runtime Seminar Softwareentwicklung Wintersemester 2003 Gertraud Orthofer
Thomas Claudius Huber Senior Consultant Trivadis AG WCF RIA Services Datengetriebene Apps.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
Developer Day Entwicklung und Betrieb näher zusammen dank Team Foundation Server 2012 und System Center 2012 Hansjörg Scherer ALM Spezialist, Microsoft.
Azure Mobile Services Deep dive into node.js scripting
 Präsentation transkript:

Patric Boscolo patbosc@microsoft.com Garbage Collection Patric Boscolo patbosc@microsoft.com

Garbage Collection in .net http://blogs.msdn.com/patricb Patric Boscolo Developer Evangelist Microsoft Deutschland GmbH patbosc@microsoft.com @patricsmsdn

mscoree.dll clr.dll GC.pptx Readme.txt C:\Windows\System32\Agenda.exe Microsoft Windows [Version 7.1.7000] Copyright (c) 2008 Microsoft Corporation. All rights reserved. C:\Users\UserName>dir mscoree.dll clr.dll GC.pptx Readme.txt Warning 1 2 3 4

Garbage Collector cleans up the mess

Quick Reminder CLR Compiler PE File Process CLR v4 CLR v2 A .net 4 My Application Target WCF WinForms DirectX ASP.net MVC Iron Python Visual F# Visual C# XNA Entity Framework WPF WorkFlow Visual Basic ASP.net SharePoint and a lot more. Compiler csc.exe, vbc.exe Assembly *.exe, *.dll PE File Process Meta MSIL CLR v4 CLR v2 A .net 4 Process can host multiple versions of the CLR side by side

The CLR.dll (Formaly known as mscorwks.dll) Assembly *.exe, *.dll, *.sys, ... Meta MSIL The CLR.dll (Formaly known as mscorwks.dll) Profiling and Debugging APIs Loader and Binder Exception Handling Security Model JIT (Formaly known as mscorjit.dll) BCL Base Class Library GC ngen.exe

The CLR evolved SP1 3.5 3.0 .NET 1.0 .NET 1.1 .NET 2.0 .NET 4.0 2002 2003 2005 - 2008 2010 2011-x

Value vs. Reference Types Object System.Object ValueTypes Class Interface Sbyte System.SByte short System.Int16 ushort System.UInt16 float System.Single Array System.Array byte System.Byte int System.Int32 uint System.UInt32 double System.Double char System.Char long Sysem.Int64 ulong System.UInt64 Enum String System.String decimal System.Decimal Structure Delegate BigInteger System.Numerics boolean System.Boolean Others Others Complex System.Numerics CLS - Compliant

Don‘t care about the Value Types, but remember the call byRef and call byValue thing. Value Types Demo

There are two Memory Blocks

SOH JIT Stack obj 2 obj 3 Child Reference Root Reference Static Root Reference Next Object Pointer obj 1 obj 4 0x000000 0x000001 0x000002 0x000003 0x000004 0xn Memory Block Command Window new obj1 = new obj1(); new obj2 = new obj2{ obj = new obj3()}; static obj4 = obj.GetInstance();

Small Object Heap (SOH) Contigous Heap Objekte werden fortlaufend allokiert (Stack Prinzip) Dies geschieht via „next object pointer“ der zur Verfügung gestellt wird Allocation of objects < 85k Objektreferenzen werden gehalten von Stack Globals Statics CPU Registers Other Objects Nicht mehr gebrauchte Objekte werden vom Garbage Collector „zerstört“ und der Speicher wird wieder zur Verfügung gestellt. X<85k Small Object Heap (SOH)

SOH JIT Stack Root Reference Next Object Pointer obj 1 obj 1 obj 2 Static Root Reference Next Object Pointer obj 1 obj 1 obj 2 obj 2 obj 3 obj 3 obj 4 0x000000 0x000001 0x000002 0x000003 0x000004 0xn Memory Block Command Window obj1 = null; obj2 = null; GC.Collect(); Child Reference

Use just the scope and let the GC do the rest! object = null; Don‘t set objects to null, since referencing causing a bigger memory footprint. Use just the scope and let the GC do the rest!

obj 1 obj 1 obj1 Root Reference Child References

Good approach for UI and Caching Weak - References

𝑉 𝑐𝑠 = 𝑉 𝑓𝑖𝑥𝑒𝑑 +𝑈∙𝑑+ 𝑟∈𝑐𝑠 𝑆∙𝑟𝑠𝑆𝑖𝑧𝑒 𝑟 +𝐶∙𝑙𝑖𝑣𝑒𝐵𝑦𝑡𝑒𝑠(𝑟) 𝑉 𝑐𝑠 = 𝑉 𝑓𝑖𝑥𝑒𝑑 +𝑈∙𝑑+ 𝑟∈𝑐𝑠 𝑆∙𝑟𝑠𝑆𝑖𝑧𝑒 𝑟 +𝐶∙𝑙𝑖𝑣𝑒𝐵𝑦𝑡𝑒𝑠(𝑟) Quelle: GarbageFirst - Garbage Collection Paper Sun Microsystems http://labs.oracle.com/jtech/pubs/04-g1-paper-ismm.pdf

Generational Garbage Collector

Generational Garbage Collector Neueste Objekte sterben in der Regel schneller als ältere Ältere Objekte bleiben in der Regel am leben GC gruppiert Objekte in Generationen Short Lived „Gen 0“ Medium „Gen 1“ Long Lived „Gen 2“ Ein Objekt startet immer in Generation 0 Wenn ein Objekt einen GC lauf überlebt wird es in die nächste Generation gesetzt. GC komprimiert Gen 0 Objekte am meisten Je öfter der GC läuft desto größer wird die Auswirkung auf die Performance Generational Garbage Collector

Stack Next Object Pointer obj A obj B obj C obj D obj E Gen 2 Gen 1 static global global obj1 obj2 Next Object Pointer obj A obj B obj C obj D obj E 0x000000 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 2 Gen 1 Gen 0

Gen 0 Garbage Collection Stack static global global obj1 obj2 Next Object Pointer obj A obj B obj C obj C obj C obj D obj D obj E obj E 0x000000 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 2 Gen 1 Gen 0

Gen 1 Garbage Collection Stack static global global Next Object Pointer obj A obj B obj B obj B obj C obj C 0x000000 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 2 Gen 1 Gen 0

Gen 2 Garbage Collection Stack static global global Next Object Pointer obj A obj A obj B obj B obj C 0x000000 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 2 Gen 1 Gen 0

GC wird ausgeführt, wenn Objekte folgende Grenze erreicht haben: Gen 0 Objects reach ~256K Gen 1 Objects reach ~2Mb Gen 2 Objects reach ~10Mb Oder der System Memory gering ist Die meisten Objekte sollten in Gen 0 sterben Gen 2 Collection hat die meisten Performance Auswirkungen Der komplette SOH wird komprimiert Large Object Heap wird collected Thresholds

Demo generations

When I‘m Good I‘m really Good Release When I‘m Bad I‘m Better!

WINDBG in Visual Studio Microsoft Visual Studio 2011 Developer Preview Debugging.cs Toolbox Team Explorer Solution Explorer Item3.cs Item2.cs //build Item1.cs Any CPU Debug File Edit View Build Debug Team Data Tools Test Analyze Windows Help text WDK for Visual Studio 2011 Developer Preview WINDBG in Visual Studio

Your Application

Tools Perfmon Visual Studio 2010 – Performance Tools http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx Visual Studio 2010 – Performance Tools http://msdn.microsoft.com/en-us/library/dd264934.aspx RedGate Ants Memory Profiler http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/ Jetbrains dotTrace http://www.jetbrains.com/profiler/ ...

Hallo Welt, Hallo Universum Temporäre Objekte Einmal allokiert kann ein Objekt seine größe nicht mehr verändern Objekte wie strings sind unveränderbar Können nicht verändert werden, neue Objekte werden stattdessen erzeugt Der Heap wird mit Temporären Objekten gefüllt Der GC wird öfters ausgeführt C:\Windows\System32\myApp.exe Microsoft Windows [Version 7.1.7000] Copyright (c) 2008 Microsoft Corporation. All rights reserved. C:\Users\UserName>myApp.exe String hello = “Hallo”; Hello += “ Welt,”; Hello += “ Hallo”; Hello += “ Universum”; Console.WriteLine(hello); >Hallo Welt, Hallo Universum Hallo Welt, Hallo Universum Hallo Welt, Hallo Hallo Welt Hallo

Generational Garbage Collector GC collected nur Ojekte der Gen 0 Partition ( Objekte mit kurzer Lebensdauer) Neue Objekte werden in Gen 0 allokiert es sei denn, eshandelt sich um sehr große Objekte, dann werden Sie direkt im LOH als Gen 2 allokiert. Die meisten temporären Objekte werden in Generation 0 allokiert und überleben keine Gen 0 GC. Gen 1 GC collected Objekte der Gen 0 + 1 (Objekte mit kurzer Lebensdauer) Gen 2 GC collected Objekte der Gen 0 + 1 +2 (auch Objekte mit langer Lebensdauer) Survivor (Objekte die einen GC überlebt haben werden in die nächste Generation promoted) Ephemeral Generations

Viele Objekte nutzen folgende Dienste Disk Network UI Resources Interop / Native Resourcen Diese Dienste benötigen „safe cleanup“ nachdem Sie von .net Klassen verwendet worden sind. Object Finalization garantiert das Code zum aufräumen ausgeführt wird, bevor der Garbage Collector ausgeführt wird. Finalizable Objects überleben mindestens 1 extra GC Durchgang und sind oft Objekte der Generation 2 Finalizable Klassen haben Finalize Method (C# or VB.net) C++ style Destructor (C#) Evil Finalizer

Evil Finalizer (SOH) Finalization Queue fReachable Queue Stack static Next Object Pointer obj D obj D obj A obj B obj C 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 1 Gen 0

Evil Finalizer (SOH) Finalization Queue fReachable Queue Stack static Next Object Pointer Finalizer Thread obj A obj D 0x000001 0x000002 0x000003 0x000004 0x000005 0x000006 0x000007 0x000008 0x000009 0x000000A Gen 1 Gen 0

Evil Finalizer DEMO

Microsoft Visual Studio Item1.cs Toolbox Team Explorer Solution Explorer Item3.cs Item2.cs namespace evilfinalizer { public class Test : IDisposable public void Dispose() GC.SuppressFinalize(this); CleanUp(true); } private void CleanUp(bool codeDispose) if(codeDispose) //Dispose called in code not by GC // Perform resource cleanup here public void Finalize() CleanUp(false); ~Test() Any CPU Debug File Edit View Build Debug Team Data Tools Test Analyze Windows Help text

Large Object Heap (LOH) Allokiert Objekte >= 85K Nicht Komprimierter Heap Objekte werden via „Free Space Table“ allokiert GC startet wenn LOH Grenzen erreicht sind Benutzt eine „Free Space Table“ um Adressen im Speicher zu finden wo Objekte allokiert werden können, anstelle eines „Next Objects Pointer“. X>85k Large Object Heap (LOH)

Large Object Heap Stack obj obj obj A obj B obj C From To FF42500 static obj obj obj A obj B obj C 0x000001 0xFF94208 0xFF182272 0xFF42500 0xFF16777216 From To FF42500 FF16777216 Large Memory Block Free Space Table

Large Object Heap Stack obj obj obj A obj B obj C From To FF42500 static obj obj obj A obj B obj C 0x000001 0xFF94208 0xFF182272 0xFF42500 0xFF16777216 From To FF42500 FF16777216 From To FF42500 FF16777216 FF94208 FF182272 Large Memory Block Free Space Table

Large Object Heap Stack obj obj obj A obj C obj D From To FF42500 static obj obj obj A obj C obj D 0x000001 0xFF94208 0xFF182272 0xFF42500 0xFF16777216 From To FF42500 FF16777216 FF94208 FF182272 From To FF94208 FF182272 Large Memory Block Free Space Table

Microsoft Visual Studio Item1.cs Toolbox Team Explorer Solution Explorer Item3.cs Item2.cs namespace bigloader { public class Bootstrap // some more things private XDocument settings = new XDocument(); public Bootstrap() // some load stuff // some more load stuff settings != null; settings.Load(@”c:/path...”); //some more stuff } Any CPU Debug File Edit View Build Debug Team Data Tools Test Analyze Windows Help text

How this works

CLR 2 Thread 1 Thread 2 Thread 3 Allocating GC Suspended Heaps SOH LOH Client GC one Server GC one per Logical Processor Collection Flavours Gen 0/1 Gen 2 Client GC always blocking can be non-blocking Server GC

CLR Allocating Suspended Allocating Thread 1 Allocating Suspended Waiting GC Waiting GC Thread 1 Waiting GC Waiting GC Thread 2

CLR 4 Client + CLR 4.5 Server Background (Async) GC replaces Concurrent GC Init Thread 1 Thread 2 Thread 3 Waiting GC Waiting GC Thread 1 GC 0/1 Waiting GC Waiting GC Thread 2 BGC Thread 1 GC 2 BGC Thread 2

Garbage Collector Notifications in .net 4.0 Disable Concurrent GC <configuration> <runtime> <gcConcurrent enabled="false"/> </runtime> </configuration> RegisterForFullGCNotification Registers for: WaitForFullGC Approach WaitForFullGCComplete Client Mode

Was gibts neues in GC Iteration 4 http://msdn.microsoft.com/de-de/library/0xy59wtx.aspx

Summary 1 2 3 4

http://blogs.msdn.com/patricb

FRAGEN?

Ihr Feedback ist uns wichtig

Vielen Dank!