博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#垃圾回收机制
阅读量:4680 次
发布时间:2019-06-09

本文共 1241 字,大约阅读时间需要 4 分钟。

转自:http://www.cnblogs.com/ArmyShen/archive/2012/08/27/2657928.html

1:垃圾回收机制

CLR托管堆:

(1)第0代--预算容量256k

(2)第1代--预算容量2M

(3)第2代--预算容量10M

注:在不同的程序中,托管堆上的实际内存管理对象的容量可能不会按照预算容量大小开辟

当第0代对象充满的时候,会自动进行垃圾回收,这时第0代中未被释放的对象成为了第1代,而新创建的对象变成第0代,以此类推,当第0代再次充满的 时候会继续执行垃圾回收,未被释放的对象会被添加到第1代,随着程序的执行,第1代对象中也会产生垃圾,此时垃圾回收器并不会立即执行回收操作,而是等第 1代被充满变成第2代时被回收并整理内存。

 

2:Finalize析构函数被调用的条件:

(1)第0代对象充满

(2)显示调用System.GC的Collect方法

(3)Windows内存不足

(4)应用程序被关闭

(5)CLR被关闭

 

3:释放模式

using System;//要实现释放模式,必须继承IDisposablepublic class MyClass:IDisposable { private bool disposed = false; private void Dispose(bool disposeing) { if (!this.disposed) { if (disposeing) { Console.WriteLine("调用引用对象的Dispose方法"); } Console.WriteLine("释放类本身非托管资源"); disposed = true; if (disposeing) { GC.SuppressFinalize(this);//禁止终结器的调用 } } } //重写IDisposable中的Dispose方法 public void Dispose() { Dispose(true); } //和上面的方法没区别 public void Close() { Dispose(true); } ~MyClass() { Dispose(false); } } public class Test { static void Main() { //using这个语法的使用,在实现IDisposable接口时才能使用 using (MyClass mc = new MyClass()) { Console.WriteLine("调用mc做些事情"); } //MyClass mc = new MyClass(); //try //{ // Console.WriteLine("调用mc做些事情"); //} //finally //{ // mc.Dispose(); //} } }

转载于:https://www.cnblogs.com/cugwx/p/4060146.html

你可能感兴趣的文章
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
[ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
查看>>
Jenkins之Linux和window配置区别
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Java之字符流操作-复制文件
查看>>
iOS开发UI篇—实现一个私人通讯录小应用(二)
查看>>
iOS开发UI篇—UITableview控件使用小结
查看>>
lesson1 预备知识
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>
SSH远程会话管理工具 - screen使用教程
查看>>
hibernate validation HV000030: No validator could be found for constraint
查看>>