码迷,mamicode.com
首页 > 其他好文 > 详细

GC垃圾回收器

时间:2017-10-16 19:41:27      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:ram   clr   垃圾回收器   性能   垃圾回收   顺序   针对   http   收集   

在.NetFrameWork中有一个垃圾回收器,用于管理应用程序内存分配释放

想要了解垃圾回收机制,要先知道托管堆堆栈

堆栈和托管堆都在线程的虚拟内存中, 堆:顺序随意  栈:先进后出

值类型存储在堆栈上,引用类型都存储在托管堆中

在使用new关键字创建类的对象时,分配给对象的内存单元就位于托管堆中,此时对于这个类只是一个引用,而没有真正的把它拿过来

而每一次在使用new关键字创建类的对象时,运行库都从托管堆为该对象分配内存,只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间

但是,托管堆的空间并不是无限大的,最终,必须要执行回收来释放一些内存。

实例化新对象过程

技术分享

 

计算字段所需空间

对象所需空间:包括两部分,同步快索引和类型对象指针

分配物理内存,新对象指针对象指向下一个可用内存区域

垃圾回收过程:

技术分享

 

标记阶段:从根标记遍历到的对象

压缩阶段:释放没有标记的对象内存,调整存在对象的位置

 

 ,是CLR垃圾收集器的一种机制,它存在的唯一目的就是提高应用程序性能

CLR支持三代内存,第0代:256K  第1代:2M  第2代:10M

每次实例化对象时,都会在第0代添加对象,

当第0代对象放满之后,就会执行垃圾回收器,将第0代的无用资源释放掉,然后把第0代的剩余有效资源放置到第1代对象中

下一次实例化新对象时,依然会放置在第0代中

技术分享

 

知道第1代内存也满了之后,才会对第1代内存执行垃圾回收,释放无用内存,然后将第1代的剩余有效资源放置到第2代对象中

垃圾回收器时.NetFrameWork在托管堆内存满了之后自动执行的,当然,也可以手动执行,使用  

GC.Collection();  释放当前托管堆中的无用资源

 

GC垃圾回收器

标签:ram   clr   垃圾回收器   性能   垃圾回收   顺序   针对   http   收集   

原文地址:http://www.cnblogs.com/wuxiangfeng/p/7678110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!