第五节:什么导致Finalize方法被调用
Finalize方法在垃圾回收结束时被调用,下面有5种事件会导致开始垃圾回收
1.第0代已满 第0代已满,垃圾回收会自动开始。该事件是目前导致Finalize方法被调用的最常见的一种方式,因为虽然应用程序的运行并分配新对象,这个事件会自然而然的发生。
2.代码显示调用System.GC的静态方法Collect 代码可以显示的请求CLR执行垃圾回收。虽然Microsoft强烈建议不要这样做,但某些时候还是必要的。
3.Windows报告内存不足 CLR内部使用Win32 CreateMemoryResourceNofification和QueryMemoryResourceNotification函数来监视系统的整体内存。如果Windows报告内存不足,CLR将强制执行垃圾回收,尝试释放已经死亡的对象,从而减少进程工作集的大小。
4.CLR卸载AppDomain 一个AppDomain被卸载时,CLR认为该AppDomain中不再存在任何根,因此会对所有代码的对象执行垃圾回收。
5.CLR关闭 一个进程正常终止时 ,CLR就会关闭。在关闭过程中,CLR会认为该进程中不存在任何根,因此会调用托管堆中所有对象的Finalize方法。
CLR使用了一个特殊的,专用的线程来调用Finalize方法。对于前4中事件,如果一个Finalize方法进入一个无线循环,这个特殊的线程会被阻塞,其他Finalize方法得不到调用。因此应用程序永远都不能回收由终结器的对象占用的的内存 ,只要应用程序运行,就会一直泄露内存。
对于第5中事件。每个Finalize大约都有2秒的时间返回,如果在2秒内没有返回,CLR就直接杀死该进程。不会调用更多的Finalize方法。另外如果调用所有对象的Finalize方法的时间超过40秒,CLR也会杀死进程。
以本章前面给出的GCBeep类型为例。如果一个GCBeep对象由于前三种事件被终结。就会在终结过程中构建一个新的GCBeep。这是合理的,因为应用程序继续运行,后面将发生更多的垃圾回收,但是,如果GCBeep对象由于第4种和第5种事件终结,就不能再构造新的GCBeep对象,否则在appdomain卸载或CLR关闭过程中,还会多余的创建对象。创建这些多余的对象后,CLR将继续调用他们的Finalize方法,被迫做大量无用功。
为了阻止构造新的GCBeep对象,GCBeep的Finalize方法调用了AppDomain的IsFinalizingForUnload方法,同时查询了System.Environment的HasShutdownStarted属性,如果对象的Finalize方法时由于AppDomain卸载而被调用,IsFinalizingForUnload方法将返回true。如果对象的Finalize方法时由于对象的终止而被调用,HasShutdownStarted属性返回true.
第五节:什么导致Finalize方法被调用的更多相关文章
- iOS NSURLConnection 和 dispatch_async 错误的使用方法,导致回调方法无法调用
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ NSMutableURLRequest ...
- Java finalize方法使用
<JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...
- [java]final关键字、finally关键字与finalize()方法
final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是 ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- 五、java基础-关键字this_static_super_abstract_final,finalize()方法finally语句块
1.关键字this 含义:this 是一个引用类型,代表当前对象,引用类型里面必然保存内存地址,在堆中的每个对象中存储,保存内存地址指向自身. 用法: 1)this可以用在成员方法中,里面保存内存地址 ...
- JVM GC-----4、finalize()方法
finalize()方法是Object类中定义的protect方法.每一个类都可以重写该方法,给出自己的实现.当类在被回收期间,这个方法就可能会被调用到. 为什么说可能?这是由于finalize()的 ...
- 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解
第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
随机推荐
- Oracle 删除数据后释放数据文件所占磁盘空间
测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办 ...
- JAVA集合学习
JAVA中有几种常用的集合类.分别是List,Set,Map等 提示:Eclipse中自动导入包的快捷键 Ctrl+Shift+O 一.List类 父接口:该类是Collection集合接口的子接口 ...
- QQ音乐无损歌曲接口api
1.打开QQ音乐官网 y.qq.com 2.选择你要的歌曲,进入后查看网址,以虎口脱险这个歌曲为例:http://y.qq.com/#type=song&mid=000Ib8E71sUNi7 ...
- nginx+lua+redis初体验
1.下载nginx.lua.redis nginx下载地址 wget http://nginx.org/download/nginx-1.8.0.tar.gz lua下载地址 wget http:/ ...
- 百度富文本编辑器UEditor安装配置全过程
网站开发时富文本编辑器是必不可少的,他可以让用户自行编辑内容的样式然后上传到后台!下面我们来介绍如何安装使用百度富文本编辑器 一.下载并且设置百度富文本编辑器的样式 你可以去百度UEditor ...
- 将Excel中数据导入数据库(三)
上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...
- only one is important
今天早上还是去了图书馆,看了一早上的hello world(intel opencl),清楚了程序编写的基本流程,但是,仍和以前一样,貌似看懂了,其实什么也不会,没有发现什么问题.中午,回来取了我的笔 ...
- 华为OJ平台——24点游戏
题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,测试用例保证无异常数字]输出: true or false 思路:
- 【Hibernate 3】一对一映射配置
一.一对一映射简介 一对一关联映射有两种实现策略: 第一种:主键关联,即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 ...
- oracle11g空表不能导出记录
select 'alter table '||table_name||' allocate extent(size 64k);' from tabs t where not exists (selec ...