c#简答题

来源:互联网 发布:csgo国服免费 知乎 编辑:程序博客网 时间:2024/04/28 11:54

1,GC是什么?为什么要有GC?

C#中有2个变量类型,一种是值类型,一种是引用类型,

值类型是在栈上创建,这一类型用不到GC,

引用类型是在堆中创建,GC主要是在这里管理对象。GC对每个对象有个引用计数,所有说只要有变量在引用它,计数器就不为0,一个变量不再引用这个对象,对象的计数器就减一,直到计数器为0时,对象就成为内存垃圾了(没有变量引用它),但是此时垃圾并没有回收。那什么时候回收呢是在内存占用超过一定限度是,GC才启动,释放垃圾资源,说白了就是delete这些对象,将空间归还给系统。但是这还没完,空间释放后,内存空间就不连续了,所有GC还要做一件事,就是将空间整理下,将占用的空间连续话,具体说就是将空间向上推,就是向高地址转存,这样空间就连续了,使用也方便了,然后GC就改变应用那些对象的变量里地地址,让他们指向正确的位置,所以说C#中的引用类型就是一种指针,一种动态改变值的指针

0 0