.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