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方法