您的位置:首页 > 编程语言 > C#

c#每日小结 <九>

2011-07-26 21:03 134 查看
.NET Framework[/b]垃圾回收器管理应用程序内存的分配与释放,[/b][/b]

分配[/b][/b]

每次使用[/b]new[/b]运算符创建对象的时候,运行库都从托管堆为该对象分配内存,内存的分配包括字段所需空间[/b]+[/b]对象所需空间[/b](也包括两部分,同步块索引和类型对象指针);[/b][/b]

垃圾回收:[/b][/b]

代[/b]是[/b]CLR[/b]垃圾收集器的一种机制,存在目的:提高应用程序的性能。它的执行过程大体如下:[/b][/b]

第一次初始化:[/b][/b]

A[/b]

B[/b]
C[/b]
D[/b]
E[/b]
[/b]

[/b]

第[/b] 0 [/b]代[/b][/b]

一轮处理[/b]:当[/b]0[/b]代中存满时,此时若又要添加新对象,垃圾收集器就会遍历线程堆栈,找出没有地址空间引用的托管堆内存空间,将其释放,[/b][/b]

A[/b]

B[/b]
C[/b]
D[/b]
E[/b]
然[/b] [/b]然后将剩余的[/b]0[/b]代对象放入[/b]1[/b]代中,将新对象放入[/b]0[/b]代中;[/b][/b]

[/b]

A[/b]

B[/b]
D[/b]
F[/b]
[/b]

第[/b] 1 [/b]代[/b] [/b]第[/b] 0 [/b]代[/b][/b]

二轮处理:[/b]当又要添加新对象时,就会将其添加到[/b]0[/b]代对象中,当[/b]0[/b]代对象存满时,就会重复一轮处理过程;当[/b]1[/b]代中也存满时,此时若又要添加新对象,垃圾收集器就会遍历线程堆栈,找出没有地址空间引用的[/b]1[/b]代和[/b]0[/b]代中的托管堆内存空间,将其释放,然[/b] [/b]然后将剩余的[/b]0[/b]代对象放入[/b]1[/b]代中,将新对象放入[/b]0[/b]代中;[/b][/b]

A[/b]

B[/b]
D[/b]
F[/b]
G[/b]
[/b]

第 1 [/b]代[/b] [/b]第[/b] 0 [/b]代[/b][/b]

然后将剩余的[/b]1[/b]代对象放入[/b]2[/b]代中,将剩余的[/b]0[/b]代对象放入[/b]1[/b]代中,将新对象放入[/b]0[/b]代中;[/b][/b]

A[/b]

D[/b]
F[/b]
H[/b]
[/b]

第[/b] 2 [/b]代[/b] [/b]第[/b]1[/b]代[/b] [/b]第[/b]0[/b]代[/b][/b]

第0代对象预算对象容量为256k,第1代对象预算对象容量为2M;第2代对象预算对象容量为10M;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息