内存分配和垃圾回收
?
???????????????????????????????.NetFrameWork?
解釋.NET Framework 的垃圾回收器管理應(yīng)用程序的內(nèi)存分配和釋放。(面試)
?
首先要實例化新對象,計算字段所需的空間 對象所需的空間包括兩部分:同步索引塊和類型對象指針 在分配內(nèi)存在事后,新對象的指針指向下一個可用內(nèi)存區(qū)域、
首先是在托管堆中給線程堆棧中的對象分配內(nèi)存空間 ,經(jīng)過一段時間后會遍歷線程堆棧 如果對象使用完了會在線程堆棧中出棧 在線程堆棧中尋找那些在托管堆中分配了內(nèi)存的對象
如果沒有找到 說明該對象已經(jīng)從線程堆棧中出棧 不再使用了 這時就會從托管堆里把給它分配的內(nèi)存釋放掉。然后壓縮托管堆 通過新對象的指針為新對象分配內(nèi)存
?
然后描述托管堆中是怎么進行內(nèi)存分配和垃圾回收的:
?
利用代(就是對象在內(nèi)存中存放的時間長短)這種垃圾收集器來給對象分配內(nèi)存:分配方式:
CLR支持3代內(nèi)存:第0代對象的預(yù)算容量為256K 第1代對象預(yù)算容量為2M 第2代對象預(yù)算容量為10M
?托管堆中沒有任何對象,此時添加的對象為0代對象
當(dāng)0代對象達到256K了 即0代對象放滿了就開始垃圾回收 找到不再使用的就釋放掉 然后把原來的還使用的放到一代中,新添加的對象放到0代中 當(dāng)?shù)诙翁砑拥膶ο蟮?/span>0代也放滿了 就啟用垃圾回收把此時的0代放到1代中 把最開始的0代放到2代中
?
?
?
?
?
?http://home.cnblogs.com/wz/關(guān)于這部分 博客園里有轉(zhuǎn)載的專家‘深奧’的解釋 呵呵
轉(zhuǎn)載于:https://blog.51cto.com/3333560/623417
總結(jié)
- 上一篇: KMP算法--字符串模式匹配算法
- 下一篇: 【博客话题】我的linux心路历程