.Net程序员都要了解的内存管理和释放机制-图文详解,建议收藏

研发玩点艰辛事 2024-03-05 14:18:14

.Net内存管理和释放机制

1).每个进程都有其自己单独的虚拟地址空间。 同一台计算机上的所有进程共享相同的物理内存和页文件,另外物理内存压力(即物理内存的需求)较低的情况下也会使用页文件).

2)内存虚拟地址的三种状态:Free,保留,已提交(物理内存).

3)CLR 负责提取托管代码、将其编译成机器代码,然后执行它。 CLR也负责自动内存管理、安全边界、类型安全,等等.

4)非托管代码的内存管理:由操作系统 (OS) 载入内存,然后启动的二进制代码

5)初始化新进程时,运行时会为进程保留一个连续的地址空间区域,这个就是托管堆.

6).net新对象默认放到0级托管堆上.

7)GC在什么时候触发回收?

7.1)应用程序在第 0 级托管堆已满时尝试新建对象,GC会执行回收0级托管,同时把未被回收的对象升级到G1托管堆中存储.

7.2)系统具有低的物理内存。 这是通过 OS 的内存不足通知或主机指示的内存不足检测出来.

7.3)调用 GC.Collect 方法(除非测试等目的,否则不建议)

8)GC什么时候回收G1,G2托管堆的内存空间?

GC的优化引擎会决定是否需要检查G1,G2中的对象。 例如:如果第 0 级托管堆的回收没有回收足够的内存,不能使应用程序成功创建新对象,GC就会先执行第 1 级托管堆的回收,再执行第 2 级托管堆的回收.

注:回收一代时,同时也会回收它前面的所有代

9)常见非托管的资源类型:包装操作系统资源的对象,例如,文件句柄、窗口句柄或网络连接.

0 阅读:0

研发玩点艰辛事

简介:感谢大家的关注