.NET垃圾收集器基础知识 [英] .NET Garbage Collector Basics

查看:235
本文介绍了.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:

  1. 在堆栈变量指向的对象堆。
  2. 在寄存器包含对象的地址在堆中。
  3. 在静态变量指着堆对象。

这是我的假设GC的​​作品。

This is how I ASSUME the GC works.

  1. 它去引用每个这样的地址,并最终在堆上的对象。
  2. 它标志着对象不是垃圾(通过使用同步块索引),因为一些变量仍指向它。
  3. 在它这样做是操作所有的地址(在大多数文章被称为根出于某种原因)
  4. 现在,因为.NET运行时有大约每个对象的类型信息,它可以计算每个物体的大小,从而堆内存的占用该块。对所有的标记的对象,它留下的存储器占用,因为它是该块。
  5. 存储器的其余部分被释放时,压实和如果必要的其它的目的是重新定位(和它们的地址更新)。

我是正确的我的理解?

推荐答案

下面是几个有用的文章:

Here's a couple of useful articles:

  • Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework
    (by Jeffrey Richter)
  • Garbage Collector Basics and Performance Hints
    (by Rico Mariani)

这篇关于.NET垃圾收集器基础知识的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆