内存管理概要

来源:互联网 发布:模拟动物的游戏知乎 编辑:程序博客网 时间:2024/05/17 02:48

引言

.NET的自动内存管理,主要包括:
* 对象创建时的内存分配 《==》对象的创建
对象的创建包括内存分配和初始化两个环节
内存的分配–CLR管理内存的区域主要有三块:
1. 线程的堆栈,用于分配值类型实例。堆栈主要由操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放
2. GC堆,用于分配小对象实例。如果引用类型对象的实例大于小于85000字节,实例将被分配在GC堆上,当有内存分配或者回收时,垃圾收集器可能会对GC堆进行压缩。
3. LOH,用于分配大对象实例。当引用类型对象的实例大于85000字节,该实例将被分配到LOH堆上,而LOH堆是不会被压缩的,而且只在完全GC回收时被回收

  • 垃圾回收
    当对象不被任何其他对象所引用的时候,GC采用某种遍历的算法,将没有遍历到的对象视为垃圾对象。

  • 非托管资源释放

    1. 大部分的类型,只存在内存资源的分配与回收问题。当碰见:数据库链接,文件句柄,网络链接,互斥体,COM对象,套接字,位图和GDI+对象时,会冯文其他非托管资源
    2. Dispose模式(Finalize弊端太多(由GC自行调用,而Dispose由开发者强制执行调用),此处不赘述)
      凡是实现了Dispose模式的类型,均可以using语句来定义其引用范围
0 0
原创粉丝点击