2010-09-24 82 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.當垃圾收集器執行收集時,其 將檢查託管堆中不再有 被應用程序使用的對象,並執行必要的 操作來收回其內存。