.NET Framework
的垃圾回收器管理和内存分配与释放
.
当在应用程序中
new
出新对象的时候
,
运行库就会在托管堆中为其分分配一定的内存空间
,
只要托管堆中有存储空间就会一直分配下去
,
但是内存是有一定容量的
,
这@"G:\MyDemo就需要垃圾回收器对内存中的对象进行管理
.
为
new
出的新对象进行分配空间的过程
:
要先分析实例化字段所需空间
,
对象所需空间包括两部分
,
同步块索引和类型对象指针
;
分配物理内存
,
新对象指针指向下一个可用内存区域
.
垃圾回收标记
:
对在线程堆栈中有指针的对象进行标记
,
释放那些没有标记的对象
,
调整存在对象的位置
.
垃圾回收过程
:
微软引进一种
”
代
”
机制进行垃圾回收管理
,0
代分配
256K ,1
代分配
2M,2
代分配
10M.
首先一直在托管堆中的
0
代添加对象例如当添加到五个的时候
0
代空间用完
,
则触发
0
代回收机制
,
对其中无标记的对象进行释放
,
然后将
0
代剩下的对象放入
1
代中
,
将将要添加的对象存入
0
代
,
继续往
0
代添加对象当
0
代空间再次用完时
,
就又触发
0
代垃圾回收机制
,
将无标记的对象释放
,
再将其余对象添加到
1
代
,
当
0
代再向
1
代添加而此时
1
代也无存储空间
,
则触发
1
代垃圾回收
,
先将
1
代中无标记的对象释放
,
然后再将
1
代中剩余的对象添加到
2
代中
,
将要
0
代的对象添加到
1
代中
,
继续往
0
代添加对象如此往返循环
.