Tag Archives: Garbage Collector

.NET Memory Internals – záznam a slides [Robert Haken, WUG Days Brno, 6.9.2024]

Záznam z přednášky pro konferenci WUG Days Brno z 6. září 2024, kde jsem ukazoval základy uspořádání paměti v .NET, internals Garbage Collectoru a pokročilý debugging pomocí Windows Debuggeru (WinDbg) a SOS extension.

Téma není zaměřené primárně na novinky, ale jde do hloubky — jak .NET skutečně spravuje paměť, jak to funguje uvnitř a jak se v tom vyznat při pokročilém debuggingu (Memory Dump, WinDbg, SOS).

Zásobník (Stack)

Zásobník je paměť pevné velikosti (defaultně 1 MB na thread), organizovaná pomocí Stack framů. Každé volání metody přidá Stack frame s lokálními proměnnými, parametry a návratovou adresou. Stack je základním mechanismem řízení běhu programu — bez něj by se metody neměly kam vracet. Stack overflow nastává téměř výhradně kvůli nekonečné rekurzi, ne proto, že by aplikace měla příliš hluboký call stack.

Managed Heap a Garbage Collector

.NET runtime si od Windows alokuje nativní paměť a část z ní předá Garbage Collectoru, který ji uspořádá jako managed heap. GC je zodpovědný nejen za uvolňování paměti (jak napovídá název), ale i za samotnou alokaci referenčních typů. Klíčovými koncepty jsou GC Generations (Gen0, Gen1, Gen2) pro generační sběr odpadu a Large Object Heap (LOH) pro velké objekty nad 85 000 bytů.

Windows Debugger (WinDbg) a Memory Dump

WinDbg je mocný, ale uživatelsky nepřívětivý nástroj pro analýzu .NET procesů a Memory Dumpů. Instaluje se přes Microsoft Store. Nejčastější workflow: z Task Manageru vytvoříte Memory Dump (pravé tlačítko → Create memory dump file), soubor načtete do WinDbg a analyzujete. Pro práci s .NET objekty je nezbytná SOS (Son of Strike) extension, která umožňuje zkoumat managed heap, zásobníky threadů a jednotlivé objekty přímo v paměti.

Slides

Novinky v .NET Internals – záznam, slides a dema [TechEd Praha 2021]

Záznam z přednášky pro konferenci TechEd DevCon Praha ze 19. května 2021, kde jsem povídal o novinkách v .NET Internals v těchto oblastech:

  • JIT, compilation
  • Diagnostic CLI tools
  • Memory Management, Garbage Collector
  • Performance

Konference probíhala on-line.

Dema: https://github.com/hakenr/DotNetInternalsDemo

Slides

C# 9.0 Candidates + .NET 5 – záznam, slides a dema [TechEd Praha 2019]

Záznam z přednášky pro konferenci TechEd DevCon Praha ze 5. května 2020. Konference letos probíhala on-line.

.NET [Core] Memory Internals – záznam, slides a dema [TechEd DevCon Praha 2019]

Záznam z přednášky pro konferenci TechEd DevCon Praha ze 16. května 2019.

.NET [Core] Internals – Garbage Collection – záznam, slides, dema [.NET Talks, 17.1.2019]

Záznam z mého vystoupení pro .NET Talks Praha ze 17. ledna 2019.

Slides a dema:

Dotčená témata:

  • Memory Architecture,
  • Simple Garbage Collection,
  • GC Roots,
  • GC Generations,
  • Large Object Heap,
  • Finalization, Unmanaged Resources.

Nahrávka je publikována na našem HAVIT YouTube Channelu.

IDisposable – implementace a mýty [Jiří Činčura, HAVIT Vzdělávací okénko 21.8.2018]

Záznam ze Vzdělávacího okénka HAVIT z 21. srpna 2018, kde Jirka Činčura mluvil o rozhraní IDisposable, jeho implementaci, využitelnosti a mýtech kolem něj.

Nahrávka je publikována na našem HAVIT YouTube Channelu.

.NET Memory Internals & Advanced Debugging – záznam, dema a slides [WUG Brno 05/2016]

Slides a dema z mé přednášky pro WUG Brno z 31.5.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • StackOverflow troubleshooting
  • Stack
  • Windows Debugger, SOS, DebugDiag
  • Heap
  • Garbage Collector
  • Prozkoumávání haldy, rootů, finalization queue
  • GC Root identification (static fields)
  • Debugging dema

[ASP].NET Worst Practices – záznam, slides a dema [Prague .NET Meetup 02/2016]

Slides a dema z mé přednášky pro setkání Prague .NET Meetup ze 17.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Garbage Collector, Finalization, C# Destructors, Resource Wrapper pattern
  • Process Failure, StackOverflow, Windows Debugger, DebugDiag
  • <compilation debug=“true|false“ />, <deployment retail=“true“/>
  • ASP.NET Over-posting / Mass-assignment
  • skládání stringů vs. StringBuilder
  • vyhledávání v datech – List vs. BinnarySearch vs. Dictionary vs. LINQ ToLookup()
  • perly code-review

Advanced Debugging .NET – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 10.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • StackOverflow troubleshooting
  • Windows Debugger, SOS, DebugDiag
  • Prozkoumávání zásobníku
  • Prozkoumávání haldy, rootů, finalization queue
  • GC Root identification (static fields)

.NET Memory Internals – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 9.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Zásobník (Stack)
  • Hodnotové vs. referenční datové typy
  • Volání metod s předáváním parametrů hodnotou vs. referencí
  • Halda (Heap)
  • Garbage Collection

V případě zájmu o dané téma doporučuji shlédnou samostatné dvě přednášky, kde bylo o trochu více časového prostoru: