2010-09-24 67 views
3

GC是什么时候运行的?它是否像是在一定的时间间隔内运行,或者当应用程序需要内存或什么?GC何时运行?

+0

就我所知,有一种确定GC是否即将运行的方法。反正也不容易。 – 2010-09-24 07:29:58

+1

@Matt:您可以注册完整的GC通知。见http://msdn.microsoft.com/en-us/library/system.gc.registerforfullgcnotification.aspx – 2010-09-24 07:44:38

+0

@Brian Rasmussen:谢谢!我不知道那件事。 – 2010-09-24 08:06:18

回答

4

简答:当需要时。

较长的答案:

  • 当分配不能兑现
  • 当一个AppDomain被卸载
  • 当Windows报告内存不足
  • 当GC.Collect的叫

此外,定稿可能会在GC后的某个时间点运行。

+1

它是特定于实现的,这意味着即使你知道这些规则,你也不应该在它们周围构建任何东西。它可能在未来发生变化。实际上,我认为管理内存管理的研究很可能不是很长的一段时间。 – 2010-09-24 07:36:21

+2

@Lasse:好点,所以我想这个建议只是坚持简短的答案。 – 2010-09-24 07:38:06

+0

是的,我认为这个答案的必然结果是“,这就是你需要知道的。” – 2010-09-24 09:29:14

0

MSFT(见链接查看更多细节):

.NET框架的垃圾回收器 管理您的应用程序分配和 内存释放。每次您创建一个新对象 时,常见的 语言运行时将为托管堆中的对象分配内存。由于地址空间在 托管堆中可用,因此 继续为新的 对象分配空间。但是,内存不是无限的 。垃圾 收集器必须执行收集 为了释放一些内存。垃圾 收集者的优化引擎 根据分配 确定执行收集的最佳时间,其中 正在进行。当垃圾收集器 执行收集时,它会检查 应用程序不再使用的托管堆中的对象 ,并执行必要的 操作以收回其内存以回收其内存。

0

1. .NET Framework的垃圾收集器管理您的应用程序的内存分配和释放。

  1. 每次创建对象时,运行时间分配 内存从托管堆中的对象。 3.垃圾回收器必须按 的顺序执行收集以释放一些内存。垃圾收集器的优化 引擎根据所做的分配确定执行收集的最佳时间, 。 4.当垃圾收集器执行收集时,其 将检查托管堆中不再有 被应用程序使用的对象,并执行必要的 操作来收回其内存。