程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 垃圾回收,垃圾分類回收

垃圾回收,垃圾分類回收

編輯:C#入門知識

垃圾回收,垃圾分類回收


1.    CLR垃圾回收器采用代(generation)機制,目前支持0、1、2三代。
  •     新構造添加到堆的對象稱為第0代。
  •     經過對第0代的垃圾回收之後,第0代的幸存者被提升至第1代。
  •     經過對第1代的垃圾回收之後,第一代的幸存者被提升至第2代

CLR初始化時,會為每一代選擇預算。第0代的預算約為256K,第1代預算約2M,第2代預算約10M。在實際使用過程中,垃圾回收器會用類似啟發式算法調整各代的預算。

 

2.    軟件開始運行時,運行時會為每一個Generation預留一塊連續的內存(這樣說並不嚴格,但不影響此問題的描述),同時會保持一個指向此內存區域中尚未使用部分的指針P,當需要為對象分配空間時,直接返回P所在的地址,並將P做相應的調整即可   3.    .NET會將對象分成兩種情況區別對象,一種是大小小於85, 000字節的對象,稱之為小對象,它就對應於前面描述的一般情況;另外一種是大小在85, 000之上的對象,稱之為大對象。在.NET中,所有大對象都是分配在另外一個特別的連續內存(LOH, Large Object Heap)中的,而且,每個大對象在創建時即屬於G2,也就是說只有在進行Generation 2的垃圾回收時,才會處理LOH。而且在對LOH進行垃圾回收時不會壓縮內存!更進一步,LOH上空間的使用方式也很特殊——當分配一個大對象時,運行時會優先嘗試在LOH的尾部進行分配,如果尾部空間不足,就會嘗試向操作系統請求更多的內存空間,只有在這一步也失敗時,才會重新搜索之前無效對象留下的內存空隙   4.    對象被標示為垃圾後會自動調用其Finalize方法,前提是對象重寫了object的Finalize方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved