Ben*_*ale 7 c# clr garbage-collection memory-management
我正在阅读C#垃圾收集器,以及CLR如何构建对象图.本章引用了可以为对象激活的不同根:
•对全局对象的引用(尽管C#中不允许这样做,但CIL代码允许分配全局对象)
•对任何静态对象/静态字段的
引用•对应用程序代码库中本地对象的
引用•对传递给对象参数的对象参数的引用方法
•对等待完成的对象的引用(本章稍后介绍)
•任何引用对象的CPU寄存器
我想知道是否有人可以在代码中提供这些根的例子?
谢谢
假设您运行以下程序:
class Program
{
static Class1 foo = new Class1();
static void Main(string[] args)
{
Class2 bar = new Class2();
Class3 baz = new Class3();
baz = null;
Debugger.Break();
bar.Run();
}
}
Run Code Online (Sandbox Code Playgroud)
当程序进入调试器时,由于以下引用,有3个以上的对象不符合垃圾回收的条件:
Class1静态字段引用的对象foostring[]参数引用的对象argsstring引用的string[]对象引用的零个或多个对象argsClass2局部变量引用的对象bar该Class3对象有资格进行垃圾收集,可能已经收集或等待最终确定.
C#中不允许引用全局对象.CPU寄存器中的引用是VM的实现细节.
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |