Finalize方法在垃圾回收结束时被调用,有五种一下情况会导致开始垃圾回收。

  第0代已满  第0代满时,垃圾回收会自动开始。改时间是目前导致Finalize方法被调用的最常见的一种方式,因为随着应用程序代码运行并分配新对象,这个时间会自然而然发生。

  代码显式调用System.GC的静态方法Collect   代码显式的请求CLR执行垃圾回收。显然Microsoft强烈建议不要这么做,但某些时候还是必要的。

  Windows报告内存不足   CLR内部使用Win32 CreateMemoryResourceNotification和QueryMemoryResourceNotification函数来监视系统的总体内存。如果Windows报告内存不足,CLR就强制执行垃圾回收,尝试释放已经死亡的对象,从而减小进程工作集的大小。

  CLR卸载AppDomain  一个AppDomain被卸载时,CLR认为AppDomain中不再存在任何根,因此会对所有代的对象执行垃圾回收。

  CLR关闭  一个进程正常终止时,CLR就会关闭。在关闭过程中,CLR会认为该进程不存在任何根,因此会调用托管堆中所用对象的Finalize方法。注意,CLR此时不会尝试压缩或释放内存,因为整个进程要终止,将由Windows负责回收进程的所有内存。

  CLR使用一个特殊的、专用的线程来调用Finalize方法。对于前4种事情,如果一个Finalize方法进入了无限循环,这个特殊的线程就会被阻塞,其他Finalize方法就得不到调用。这种请狂况非常糟糕。因为应用程序永远都不会回收由可终结的对象占据的内存------只要应用程序运行,就会一直泄露内存。

Finalize什么时候被调用的更多相关文章

  1. C#学习笔记---Dispose(),Finalize(),SuppressFinalize

    http://www.cnblogs.com/eddyshn/archive/2009/08/19/1549961.html 在.NET的对象中实际上有两个用于释放资源的函数:Dispose和Fina ...

  2. final .....finally ...... 和Finalize ......区别

    一.性质不同 ()final为关键字: ()finalize()为方法: ()finally为为区块标志,用于try语句中: 二.作用 ()final为用于标识常量的关键字,final标识的关键字存储 ...

  3. java的finalize()函数

    在说明finalize()的用法之前要树立有关于java垃圾回收器几个观点: "对象可以不被垃圾回收" : java的垃圾回收遵循一个特点, 就是能不回收就不会回收.只要程序的内存 ...

  4. java基础知识分析: final , finally,finalize

    final final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方 ...

  5. System.gc()与Object.finalize()的区别

    finalize()是由JVM自动调用的,你可以用System.gc(),但JVM不一定会立刻执行,JVM感觉内存空间有限时,才会开始执行finalize(),至于新的对象创建个数和被收集个数不同是因 ...

  6. 禁止使用finalize方法

    Don´t use Finalizers, mainly because are unpredictable and we don´t know when will be executed, &quo ...

  7. 谈谈C#中的 Dispose 和 Finalize

    主要有一下几点需要知道: 1. Dispose需要实现IDisposable接口. Finalize就是c#中的析构方法,方法名以~开始. 2. Dispose由开发人员代码调用,而Finalize由 ...

  8. Java中finalize()

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们 ...

  9. IDispose(), Finalize()

    C#  using 用法: 1. 作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型.(见例1-1) 2. 作为语句,用于定义一个范围,在此范围的末尾将释放对象.(见例1-2) (例子1- ...

随机推荐

  1. 设置IDEA自动提示补全代码,关于idea自动补全的详细设置。

    在IDEA中,默认的代码自动提示不够智能,现在配置成更加智能的方式. File-Settings-Editor-General-Code Completion中 把最上面的大小写敏感度改成none,下 ...

  2. spring源码读书笔记

    如果我们在web项目里面使用spring的话,通常会在web.xml里面配置一个listener. <listener> <listener-class> org.spring ...

  3. SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Depart

    今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...

  4. 2019 Multi-University Training Contest 7 Kejin Player Final Exam

    Kejin Player 期望DP 题意: 初始等级为1,每一级有四个参数 r , s , x , a . 每一级有一个概率p=r/s花费a的代价升级到下一级,失败可能会倒退到x级 设从 l 到 r ...

  5. virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法

    virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法 自己解决了,记录一下. cdlinux 带reaver1.4的版本 http://pan.baidu.com/share/link ...

  6. 【笔记篇】C#笔记2

    返回目录:目录请戳这里~ C#数组 基本概念不提.. int[] a; bool[] b = new bool[10]; float[] c = {0.5, 57.0, 233.3, 12345.67 ...

  7. loj2509 hnoi2018排列

    题意:对于a数组,求它的一个合法排列的最大权值.合法排列:对于任意j,k,如果a[p[j]]=p[k],那么k<j. 权值:sigma(a[p[i]]*i).n<=50W. 标程: #in ...

  8. LUOGU P4163 [SCOI2007]排列

    传送门 解题思路 首先我们发现这道题s的长度很小,所以考虑点暴力的做法,状压dp或搜索.本蒟蒻搜索永远调不对,所以就写了个状压dp.因为所有s里的数都要出现一次,并且最后的答案是要求整除,那么我们设d ...

  9. sql.xml大于小于号处理的方法

    <if test="startTime != null and startTime != ''"> AND i_DataTime <![CDATA[ >= ...

  10. linux 软件 手动添加至桌面或启动栏

    1.创建软连接(也可以不用创建软连接,直接写绝对路径) sudo ln -s /opt/eclipse/eclipse /usr/bin/eclipse 2.创建desktop文件 sudo gedi ...