您好,登录后才能下订单哦!
这篇文章主要讲解了“.NET垃圾回收机制知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET垃圾回收机制知识点总结”吧!
1. .NET资源分托管资源和非托管资源,对于托管资源,.NET GC可以很好的回收无用的垃圾,而对于非托管(例如文件访问,网络访问等)需要手动清理垃圾(显式释放)。
2. 非托管资源的释放,.NET提供了两种方式:
1).Finalizer:写法貌似C++的析构函数,本质上却相差甚远。Finalizer是对象被GC回收之前调用的终结器,初衷是在这里释放非托管资源,但由于GC运行时机的不确定性,通常会导致非托管资源释放不及时。另外,Finalizer可能还会有意想不到的副作用,比如:被回收的对象已经没有被其他可用对象所引用,但Finalizer内部却把它重新变成可用,这就破坏了GC垃圾收集过程的原子性,增大了GC开销。
2).Dispose模式:C#提供using关键字支持Dispose Pattern进行资源释放。这样能通过确定的方式释放非托管资源,而且using结构提供了异常安全性。所以,一般建议采用Dispose Pattern,并在Finalizer中辅以检查,如果忘记显式Dispose对象则在Finalizer中释放资源。
3. 托管资源的回收,判断对象是否要被回收只要判定此对象或者其包含的子对象没有任何引用是有效的
4. GC的代价:一则丧失了托管资源回收的实时性,二是没有把C#托管资源和非托管资源的管理统一起来,造成概念割裂
5. .NET类型分两大类:引用类型、值类型,值类型分配在栈上,不需要GC回收;引用类型分配在堆上,它的释放和回收需要GC来完成。一个引用类型的对象要被回收,需要要成为垃圾
6. 系统为GC安排了独立线程,对于内存回收GC采取了一定的优先算法进行轮循回收内存资源
7. Generation(代),为了提高性能,越老的对象存活的越久。.NET中一般分为三代,G0,G1,G2;G0***被回收。
8. 垃圾回收的步骤,标记->整理->终结
9. GC.Collect()一般要和GC.SuppressFinalize函数配合使用,使用GC.SuppressFinalize函数,防止清理冲突。
感谢各位的阅读,以上就是“.NET垃圾回收机制知识点总结”的内容了,经过本文的学习后,相信大家对.NET垃圾回收机制知识点总结这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。