对非托管资源的隐式控制是由析构方法提供的,它会在对象销毁时由垃圾回收器调用。
析构方法应该只释放对象占用的资源,而不应该引用其他对象。请注意,如果只有托管引用,就无需也不应该实现析构方法,它只适用于处理非托管资源。
因为析构方法需要一定的开销,应该在需要它的方法中才实现。

不能直接调用对象的析构方法,垃圾回收器会为我们调用的。

****析构方法的工作原理*****
垃圾回收器会维护一个含有析构方法的对象列表。此列表在每次创建或销毁这种对象时都会更新。

当这一列表中的对象首次被回收时,它会被放到一个队列中与其他被放在队列中的其他对象一起等待销毁。在析构方法执行之后,垃圾回收器会回收对象,并更新队列及可销毁列表。

C#的析构方法
C#的析构方法从语法上看很像C++的析构方法,但它们的行为有很大差异。声明C#析构方法可以用“~”符号,如下所示:
  ~MyClass()
但在C#中,这种语法知识声明与其基类相关联的一个Finalize()方法的一种缩写形式。所以如下语句:
  ~MyClass()
  {
       //进行的操作
  }

C#编译器将其翻译为:
  protected override void Finalize()
  {
     try
     {
         //进行的操作
     }
     finally
     {
         base.Finally();
     }
  }

如果要清楚那些昂贵的非托管资源(如文件句柄),须要尽快关闭并清楚它们,应该实现IDisposable接口。
该接口要求我们实现一个名为Dispose()的方法。
所以如果提供了Dispose()方法,应该停止垃圾回收器调用对象的析构方法(如果你也为该类同时定义了析构方法的话)。要停止垃圾回收器,
应调用静态方法GC.SupperessFinalize(),将对象的this指针传给它。然后析构方法调用Dispose()方法。

关于更清楚地了解.net的垃圾回收机制相关推荐

  1. 人生苦短,能让你更早下班的Python垃圾回收机制

    人生苦短,只谈风月,谈什么垃圾回收. 据说上图是某语言的垃圾回收机制... 我们写过C语言.C++的朋友都知道,我们的C语言是没有垃圾回收这种说法的.手动分配.释放内存都需要我们的程序员自己完成.不管 ...

  2. 能让你更早下班的Python垃圾回收机制

    人生苦短,只谈风月,谈什么垃圾回收. 据说上图是某语言的垃圾回收机制... 我们写过C语言.C++的朋友都知道,我们的C语言是没有垃圾回收这种说法的.手动分配.释放内存都需要我们的程序员自己完成.不管 ...

  3. 详细介绍Java垃圾回收机制

    垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...

  4. 图解 Java 垃圾回收机制,写得非常好!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文:https://www.oracle.com/webfold ...

  5. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  6. Python3.5源码分析-垃圾回收机制

    Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...

  7. 深入浅出Java垃圾回收机制

    2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...

  8. Java 垃圾回收机制,13张图给你讲清楚!

    作者:Rhys_Lee 等等等 https://blog.csdn.net/zl1zl2zl3/article/details/90904088 什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 ...

  9. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

最新文章

  1. Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)
  2. 说明:最新谷歌AI智商不超过6岁研究来自中国科学院而非美国康内尔大学
  3. clion 远程连接linux服务器 开发调试
  4. 【AutoML】进化算法如何用于自动模型搜索(NAS)
  5. Python手动实现kmeans聚类和调用sklearn实现
  6. WPF 使用DMSkin for WPF 快速搭建漂亮的WPF程序
  7. 怪怪设计论闲谈篇:职责与解耦的矛盾
  8. 我的KT库之----数据对象
  9. python select
  10. leetcode力扣64. 最小路径和
  11. AI实战:基于AdvancedEAST的自然场景图像文本检测算法
  12. 马士兵_JAVA自学之路(为那些目标模糊的码农们)
  13. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
  14. NLP --- 文本分类(基于SVD的隐语意分析(LSA))
  15. layui jquery innerHTML 无效
  16. python snap7 plc_基于Snap7实现与西门子PLC通信(示例代码)
  17. erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。
  18. 计算机主机检测不到耳机,win10电脑检测不到耳机的原因及处理方法
  19. 王之泰/王志成《面向对象程序设计(java)》第十一周学习总结
  20. 前端获取本地ip和外网ip

热门文章

  1. 前端之Bootstrap框架
  2. 2017瞻博网络年会隆重召开 重点发力电信和OTT两大市场
  3. 活动目录系列之一:主域控制器的搭建
  4. 使用粘性布局实现tab滑动后置顶
  5. 怎样解决输入法不能切换?
  6. Channel延续篇
  7. 第10章 指针(五) 使用地址-------指针的引用
  8. java多线程系类:基础篇:10生产者消费者的问题
  9. 高性能Sqlite存储模型对象解密
  10. [Bug]由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值的解决方法(转)...