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