C# GC探索

垃圾收集

当您在 C# 中创建任何对象时,CLR(公共语言运行时)会从堆中为该对象分配内存。每个新创建的对象都会重复这个过程,但凡事都有限制,内存不是无限的,我们需要清理一些使用过的空间,以便为新对象腾出空间,这里介绍垃圾回收的概念, 垃圾收集器管理内存的分配和回收。GC(垃圾收集器)在堆上进行一次旅行,收集应用程序不再使用的所有对象,然后将它们从内存中释放出来。

当任何进程被触发时,单独的虚拟空间被分配给该进程,从一个系统的每个进程使用的相同的物理内存中,任何程序处理虚拟空间而不是物理内存,GC也处理相同的虚拟空间memory 来分配和取消分配内存。基本上,虚拟内存中存在空闲块(也称为空洞),当内存分配管理器的任何对象请求搜索空闲块并将内存分配给所述对象时。

虚拟内存有三个块:

简单来说,三块分别是空白内存、待分配(物理存储)内存、待分配(物理存储)内存。

  1. 0:这一代持有短期对象,例如临时对象。GC在这一代频繁启动垃圾收集过程。
  2. 1:这一代是短寿命和长寿命对象之间的缓冲区。
  3. 2这一代持有像静态和全局变量这样的长寿命对象,需要持久化一段时间。没有在第 0 代收集的对象,然后被移动到第 1 代,这样的对象被称为幸存者,类似地,没有在第 1 代收集的对象,然后被移动到第 2 代,从那里开始对象保持在同一代。

GC原理探索

GC 在CLR上工作,它只不过是一块内存来存储对象,当垃圾收集进程启动时,它会检查死对象,然后压缩活动对象的空间并尝试释放更多内存。

基本上,堆由不同的代管理,它存储和处理生命周期长或者短的对象,我们可以通过MaxGeneration方法获取系统当前支持的最大代数。

 触发0、1、2代的最高阈值为256k、2m、10m。

未完待续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杞人忧天abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值