• 垃圾回收机制


    crl为了管理托管堆的内存分配和回收问题。设计了垃圾回收机制。

    首先,引用类型在托管堆上分配内存。clr假设该堆是无限大的。在应用程序加载的时候进行初始化,关闭的时候进行回收。

    但是,堆再大也是有限度的。当托管堆被用完的时候,clr就开始进行垃圾回收。

    clr内部保存一个所有对象地址的列表,它会定期检查该表的中的对象,首先假设所有对象都没有被引用

    然后检查对象是否被一些跟引用,如果是,放弃如果不是就标记为垃圾。等待回收。

    没有被回收的,升级为第一代垃圾。

    clr为第一代垃圾分配有限的空间。当该空间被用完时,回收第一代垃圾,从而减少垃圾回收的次数。

    被剩下的对象升级为第二代。

    clr垃圾共三代。

    垃圾回收把程序员从内存管理的繁琐工作中解放出来。

    对应托管程序的类型不用程序员自己管理内存。但是对应托管程序使用的本地资源,也就是非托管资源,如i/o操作使用的类型、数据库连接等。

    垃圾回收不能对非托管资源进行回收,因此使用该类资源的时候需要手动释放这些资源。

    如:

    public class Test:IDispose

    {

    //本地资源,句柄

    IntPtr res;

    public Test(IntPrt r)

    {

    res=r
    }

    public void Dispose()

    {

    res=IntPtr.Zero;
    }
    }

  • 相关阅读:
    rt_list_entry() 函数
    替换空格
    跳台阶
    斐波那契数列
    基于5221码的同步十进制加法计数器
    强连通分量+Tarjia+缩点
    次小生成树
    差分约束
    P1547 Out of Hay
    P1197 [JSOI2008]星球大战
  • 原文地址:https://www.cnblogs.com/363546828/p/3137531.html
Copyright © 2020-2023  润新知