new与垃圾回收
new
new關鍵字返回的是一個指向堆上對象的引用,而不是真正的對象本身。這個引用變量保存在棧內,以供應用程序以后使用。
1、使用new關鍵字將一個對象分配在托管堆上,然后不用再管:當對象從代碼庫的任何部分都不可達時,垃圾回收器就會從堆中刪除它。
2、托管堆不只是一個由CLR訪問的隨機內存塊。.NET垃圾回收器是堆的“清潔工”,它會壓縮空的內存塊來實現優化(必要的時候)。
?
newobj指令通知CLR執行下面的核心任務
1、計算分配對象所需要的總內存數(包含類型的成員變量和類型的基類所需的必要內存)
2、檢查托管堆,確保有足夠的空間來放置要分配的對象。
3、在將引用返回給調用者之前,移動下一個對象的指針,指向托管堆上的下一個可用的位置。
當處理newobj指令時,如果CLR判定托管堆沒有足夠的空間來分配所請求的類型,它會執行一次垃圾回收來嘗試釋放內存。
如果托管堆沒有足夠的內存來分配所請求,就會進行垃圾回收。當確實發生垃圾回收時,垃圾回收器暫時掛起所有在當前進程(process)中所有的活動的線程(thread)以保證應用程序在回收過程中不會訪問堆。
?
?
轉載于:https://www.cnblogs.com/76674718/archive/2009/11/01/1594223.html
總結
- 上一篇: 周计(11月1日)
- 下一篇: Nothing Phone 2 手机暴力