CLR Garbage Collection
1. Memory architecture
2. Generations
- Generation 0 : Short lived objects (Collected frequently)
- Generation 1 : Medium lived objects (Collected less frequently)
- Generation 2 : Long lived objects (Variable size and expensive to collect)
- Generation 0 and 1 is known as the ephemeral segment (Fixed size)
SOS : !eeheap -gc
SOSEX : !gcgen <address>
3. Roots
- GC uses roots to find which objects are alive or dead
- Any object with an existing reference to it has a root and is thus considered alive
- Roots are determined using the following components:JIT compoler, Stack walker, Handle table, Finalize Queue
SOS : !gcroot <address>
4. Finalization
- GC only knows about managed objects
- Objects that wrap native types need a cleanup mechanism
- Objects that wrap a native types must:
- Implement a Finalizer
- Implement IDisposable
- Both methods should use same private helper method
Finalization Best Practices
- Whenever possible do not rely on finalization rather always explicitly Dispose finalizable objects
- If you implement a finalizer you should also implement IDisposable (Dispose suppresses the object finalization)
- In C#, the using {} pattern automatically invokes the Dispose method
5. Large object heap
- Objects greater than 85,000 bytes
- Key difference is that LOH is not compacted (Very common cause of memory fragmentation)
- Introduced to avoid the cost of compaction
6. Pinning problems
- As part of compaction the GC may move an object around
- Problem for objects passed to native code (For example, a buffer to async native operation)
- Pinning tells the GC that it is not allowed to move the object
- Excessive pinning common cause of memory fragmentation
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库