CLR via C# 学习笔记(2012/3/13)
来源:互联网 发布:全自动加好友软件 编辑:程序博客网 时间:2024/05/06 10:09
第21章 自动内存管理
这一章主要是讲解垃圾回收的原理。在面向对象语言出现之前,比如C/C++,都是手动分配、回收内存的,很容易忘记回收内存,导致内存来不及回收,造成内存泄漏。而CLR采用了垃圾回收器来减轻开发人员的工作,可以专心面对程序层的技术处理,而不用考虑内存的分配与回收这种吃力不讨好的事情。
讲讲垃圾回收算法吧,垃圾回收算法的主要是包括两个阶段。
第一个阶段是标记:每个应用程序都包含一组根,这些根包含的是指向托管堆上的一组指针,也就是分配对象的地址。第一阶段,垃圾回收器会遍历这些根,根据这些根在应用程序中可达与不可达来进行标记,标记过的就说明对象还被使用。而不可达的对象就被视为垃圾。
第二个阶段是压缩:也就是移动内存,将存活的对象压缩到一起,留有更多的空间让程序继续使用。而这个过程是最耗性能的,所以应该尽可能地让垃圾回收器自己确定什么时候回收,而不要主动去回收。
CLR垃圾回收器采用一种机制:代。将内存分为3代:0、1、2代,代数越大,对象越老。提出这个机制的假设是:对象越新,生存期越短;对象越老,生存期越长。
也就是0代的最有可能是存在垃圾,最需要回收的地方,所以分配容量大小也是越小越少。这样能够更好地提升性能。
主要的工作流程是:分配的对象都放在0代上,当0代不能再放下新的对象时,垃圾回收器就执行一次垃圾回收,而存活的对象就移到1代里,然后不断重复这个过程,直到0代放不下,而1代也放不下里,这时垃圾回收器会回收0、1代的对象,1代的就变2代,0代变1代,一直这样下去,不断循环。
- CLR via C# 学习笔记(2012/3/13)
- CLR via C# 学习笔记(2012/3/4)
- CLR via C# 学习笔记(2012/3/6)
- CLR via C# 学习笔记(2012/3/6)
- CLR via C# 学习笔记(2012/3/7)
- CLR via C# 学习笔记(2012/3/10)
- CLR via C# 学习笔记(2012/3/11)
- CLR via C# 学习笔记(2012/3/12)
- CLR via C#笔记
- clr via C#笔记(3)
- CLR via C# 阅读 笔记
- CLR via C#学习日记
- CLR Via C# 学习笔记(4) 方法 构造函数
- CLR Via C# 学习笔记(3) 常量和字段(const readonly)
- clr via C#笔记(4)
- clr via C#笔记(1)
- clr via C#笔记(2)
- clr via C#笔记(5)
- 三角形的涟漪
- ucos在s3c2410上运行过程整体剖析--创建任务到多任务调度及运行
- xcode UIWebView 装载本地页面或是远程页面的过程
- ibatis学习笔记(一)例子
- 第四周任务3
- CLR via C# 学习笔记(2012/3/13)
- ucos在s3c2410上运行过程整体剖析-- 整体运行环境及工具说明
- Template Method (模板方法模式)
- android adb devices no permission
- ucos在s3c2410上运行过程整体剖析---两种任务切换的实现方法
- 《Android深入浅出》
- Android的显示系统
- Oracle定义varchar2()类型存储汉字的长度问题
- jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤