.NET Framework垃圾回收器管理应用程序内存的分配与释放,
分配
每次使用new运算符创建对象的时候,运行库都从托管堆为该对象分配内存,内存的分配包括字段所需空间+对象所需空间(也包括两部分,同步块索引和类型对象指针);
垃圾回收:
代是CLR垃圾收集器的一种机制,存在目的:提高应用程序的性能。它的执行过程大体如下:
第一次初始化:
A |
B |
C |
D |
E |
第 0 代
一轮处理:当0代中存满时,此时若又要添加新对象,垃圾收集器就会遍历线程堆栈,找出没有地址空间引用的托管堆内存空间,将其释放,
A |
B |
C |
D |
E |
然 然后将剩余的0代对象放入1代中,将新对象放入0代中;
A |
B |
D |
F |
第 1 代 第 0 代
二轮处理:当又要添加新对象时,就会将其添加到0代对象中,当0代对象存满时,就会重复一轮处理过程;当1代中也存满时,此时若又要添加新对象,垃圾收集器就会遍历线程堆栈,找出没有地址空间引用的1代和0代中的托管堆内存空间,将其释放,然 然后将剩余的0代对象放入1代中,将新对象放入0代中;
A |
B |
D |
F |
G |
第 1 代 第 0 代
然后将剩余的1代对象放入2代中,将剩余的0代对象放入1代中,将新对象放入0代中;
A |
D |
F |
H |
第 2 代 第1代 第0代
第0代对象预算对象容量为256k,第1代对象预算对象容量为2M;第2代对象预算对象容量为10M;