引用类型:引用类型分配在堆上面,实例化的时候会在堆上面开辟一块空间存储当前类型的实例,,就是说引用类型保存的是地址,指向一块内存 引用类型分类:类{System.Object},自定义的类,字符串,接口,数组等 值类型:值类型分配在栈上面 值类型分类:int ,long ,float,char,bool,enum,struct等
托管资源和存在堆里的资源(值类型和引用类型)
托管资源:一般指被CLR控制的内存资源,这些资源的管理可以有CLR控制,例如程序中分配的对象,作用域的变量,大部分对象都是托管资源。
非托管资源:文件流,数据库连接等第三方资源,打印机,系统的窗口句柄都是非托管资源
如图:垃圾回收过程
第一次,遍历全部对象,找到没有引用过的,删除,剩下一代
第二次,遍历0代对象,找到没有引用的,删除,剩下升级到1代,日过空间还是不够,开始遍历1代,同样,没有引用的删除
如果还在被使用中,那么升级为2代,都不够才会检查2代
这样依次循环过滤,最终随着一段时间的运行,持续回收,从上往下,都是2代-1代-0代,2代是稳定的,只扫描0代或1代效率高。
原文:https://www.cnblogs.com/wangmaolin/p/13958154.html