| « | October 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| 公告 |
| 努力学习C#。 |
| Blog信息 |
|
blog名称:Areyan's Blog 日志总数:31 评论数量:10 留言数量:-2 访问次数:140448 建立时间:2005年1月5日 |

| |
|
[.Net]无用存储单元收集器工作小谈 软件技术
阿严 发表于 2006/5/27 11:43:30 |
| 无用存储单元收集器是因为中间语言是为处理该过程而工作的。其规则要求,第一,不能引用已有的对象,除百复制已有的引用。第二,中间语言的类型安全的语言。在这里,其含义是如果存在对对象的任何引用,该引用中就有足够的信息来确定对象的类型。
无用存储单收集机制不能和诸如未受管制的C++这样的语言一起使用,因为C++允许在类型之间使用指针自由地转换数据类型。这样,搜索代码的程序就找不到指针的值,不能获得足够的信息来确定堆的什么区域正在使用。如前氘核,IL还允许在不安全的代码中使用指针,以及在指针之间转换数据类型。但使用IL,会严格限制使用这些指针的方式,以确保在代码中使用的指针不与无用存储单元收集器的需求冲突。特别是指针不允许设置为指向引用对象。无用存储单元收集器的一个重要方面是它是不确定的。换言这,不能保证什么时候会调用无用存储单元收集器;.NET运行时决定需要它时,就可以调用它。显然,代码对内存的需求越多,无用存储单元收集器的调用次数就越多。但其次数是可以预计的。在代码中,可以使用.NET基类System.GC显式地调用无用存储单收集器,例如,可以在代码使用完大量的变量后调用它。但在大多数情况下,只需委托.NET运行时在合适的时候调用无用存储单元收集器即可。 |
|
|