.NET垃圾收集器基础知识 [英] .NET Garbage Collector Basics
本文介绍了.NET垃圾收集器基础知识的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我很抱歉,如果这个问题的答案实在是微不足道。但是,我仍然无法弄清楚这个由我自己。
I apologize if the answer to this question is trivial. But I still cannot figure out this by myself.
如何在.NET中的垃圾回收器确定堆有哪些对象是垃圾,哪些对象是不是?
How does the garbage collector in .NET identify what objects on the heap are garbage and what objects are not?
可以说,一个.NET应用程序正在运行,并在某一时间点的垃圾收集的发生(让离开了几代人,并终结队列为简单起见)。
Lets say a .NET application is running and at a certain point of time garbage collection occurs(lets leave out the generations and finalization queue for simplicity sake).
现在的应用程序可能有:
Now the application may have:
- 在堆栈变量指向的对象堆。
- 在寄存器包含对象的地址在堆中。
- 在静态变量指着堆对象。
这是我的假设GC的作品。
This is how I ASSUME the GC works.
- 它去引用每个这样的地址,并最终在堆上的对象。
- 它标志着对象不是垃圾(通过使用同步块索引),因为一些变量仍指向它。
- 在它这样做是操作所有的地址(在大多数文章被称为根出于某种原因)
- 现在,因为.NET运行时有大约每个对象的类型信息,它可以计算每个物体的大小,从而堆内存的占用该块。对所有的标记的对象,它留下的存储器占用,因为它是该块。
- 存储器的其余部分被释放时,压实和如果必要的其它的目的是重新定位(和它们的地址更新)。
我是正确的我的理解?
推荐答案
下面是几个有用的文章:
Here's a couple of useful articles:
- 垃圾收集:在Microsoft .NET框架自动内存管理
(由杰弗里里希特) - 垃圾收集器基础知识和性能提示
(由波多黎各马里亚尼)
- Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework
(by Jeffrey Richter) - Garbage Collector Basics and Performance Hints
(by Rico Mariani)
这篇关于.NET垃圾收集器基础知识的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文