首页 > 编程语言 >C#知识整理-垃圾回收机制(GC)

C#知识整理-垃圾回收机制(GC)

时间:2024-12-30 23:20:15浏览次数:1  
标签:C# object gen2 gen0 gen1 对象 GC 垃圾

垃圾回收的基本知识 - .NET | Microsoft Learn 非托管资源 CLR系统只能跟踪其生存周期,而不能决定如何释放资源 如:数据库连接,文件句柄、指针结果等 非托管资源需要手动释放 托管资源

  • 栈资源
  • 托管堆
GC主要应用与托管资源 从根对象遍历堆上分配的对象,不再被引用到的对象被判定为垃圾,被引用的对象为reachable object 注** : 全局对象和静态变量将长期存在,不会被GC回收 Mark-Compact标记压缩算法(MC算法) 标记压缩算法是垃圾回收的算法 标记reachable object 和 unreachable object => unreachable object会释放,压缩reachable object 分代算法 对于unreachable object一共分三代:gen0,gen1,gen2
  • gen0,gen1,gen2所占用的内存由小变大,gen0最小,gen2最大
  • gen2里的对象占用的内存如果超出gen2所能分配的内存,程序会报错
  • 每当一个generation占用的内存满了,且又要分配内存的时候会对对应的generation进行GC(使用MC算法)
举个例子: 当我第一次分配对象,A,B,C,D,E 0 之后再次进行对象分配,有了新对象F,G,H,然后C对象已经不访问了

F,G,H应该被分配到gen0的内存中,假设这个时候gen0的内存不足了 这个时候gen0会进行GC,对gen0升代,gen0里的对象变为gen1 gen0进行GC的时候会使用MC算法将对象C释放

这时候再次进行对象分配,有了新对象I,G,K,并且对象B不被引用了 假设gen0的内存不足了,gen0会再次进行GC并升代 对象B此时并没有释放,因为gen1的内存还足够分配,所以并没有进行GC

 

当再次进行对象分配,新对象H 假设gen0内存不足,gen0里的I,G,K会由GC进入gen1 这时候gen1的内存也不足,gen1也会进行GC升代到gen2

 

执行的过程就是以此类推的进行

标签:C#,object,gen2,gen0,gen1,对象,GC,垃圾
From: https://www.cnblogs.com/terry841119/p/18642687

相关文章

  • ov5640_lcd_display学习笔记
    最近学习了正点原子fpgaov5640摄像头显示例程,特此记录一下。系统框架与接口FPGA要操控的外围器件为ov5640摄像头、LCD和DDR3,接口方面也并不算复杂,用到的接口为sccb、dvp以及RGB888。sccb接口用来配置摄像头寄存器参数,并且iic兼容sccb,所以配置寄存器直接调用iic的驱动模块即......
  • 20. C++快速入门--并发基础
    参考:《Professionalc++》,《并发编程实战》1基本概念1.1竞争原子性"原子"(atomic)操作是指一种不可分割的操作,即在执行过程中不会被中断的操作。这种操作要么完全执行,要么完全不执行,不会出现部分执行的情况。应用场景计数器:在多线程环境下安全地递增或递减计数器。标......
  • 《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
    @目录二、高级篇(大厂进阶)1.Docker复杂安装详说1.1安装mysql主从复制1.2安装redis集群1.2.1面试题:1~2亿条数据需要缓存,请问如何设计这个存储案例哈希取余分区一致性哈希算法分区哈希槽分区1.2.23主3从redis集群扩缩容配置案例架构说明整体流程图知识点总结图使用步骤:注意点说明......
  • 最新版Chrome浏览器集成ActiveX控件步骤
    编写背景   allWebPlugin中间件迎春版刚刚发布,受到很多网友的青睐。它极大的简化了Web系统集成ActiveX插件的步骤,提高了产品的实用性和通用性。本文将详细介绍如何使用allWebPlugin中间件接口,快速集成ActiveX插件。allWebPlugin简介   allWebPlugin中间件是一款......
  • Excel 面试 02 逻辑函数 AND
    Excel中的AND函数用于测试多个条件是否全部为TRUE。如果所有条件都为TRUE,函数返回TRUE;如果有任何一个条件为FALSE,则返回FALSE。语法AND(logical1,[logical2],...)logical1,logical2,…:要测试的逻辑条件,可以是表达式(例如A1>10)、对单元格的引用、或者直接......
  • Flurl.Http集成Microsoft.Extensions.ServiceDiscovery
    .Net8.0及以上版本,微软官方提供了服务发现Nuget包Microsoft.Extensions.ServiceDiscovery,能够对HttpClient请求服务进行服务发现和解析,对于轻量级Flurl.Http来说,也可以进行集成,主要思路是通过HttpClientFactory构建HttpClient实例,调用newFlurlClient(httpClientFactory.Crea......
  • 【Java并发编程线程池】 ForkJoinPool 线程池是什么 怎么工作的 和传统的ThreadPoolEx
    Java中的ForkJoinPool线程池是什么怎么工作的Java中的ForkJoinPool线程池是什么怎么工作的相比较于传统的线程池,ForkJoinPool线程池更适合处理大量的计算密集型任务,它的核心思想是将一个大任务拆分成多个小任务,然后将这些小任务分配给多个线程去执行,最后将这些小任务的......
  • Django Admin 中实现动态表单:无 JavaScript 解决方案
    引言在开发Web应用时,我们经常需要创建动态表单,即根据用户的输入动态更新其他字段的选项。通常,这种功能会使用JavaScript来实现。但是,在某些情况下,我们可能希望避免使用客户端脚本,而完全依赖服务器端逻辑。本文将介绍如何在DjangoAdmin中实现这样的动态表单,而无需使......
  • CSS系列(46)-- Color Functions详解
    前端技术探索系列:CSSColorFunctions详解......
  • 基于cd4511的九路抢答器1和7不能锁存而作
    基于cd4511的九路抢答器1和7不能锁存八路抢答器1和7不能锁存proteus仿真抢答器9路四路抢答器CD4511和ne555电路图原理图仿真图数码管洞洞板焊接本篇文章是基于作者tzk0524的九路抢答器电路图及原理图而出现的(封面是改前的)因为当时是为了验证自己的走线猜测,所以简化了......