当前位置: 首页 > news >正文

浅谈.net 垃圾回收机制(1)

大家都知道.net程序创建对象后没法写代码销毁对象,它有它自己的处理机制,今天来大概说说它的原理,探讨下它是如何管理对象即管理内存的

在程序里使用new 关键字实例化一个对象 如果这个对象类型是引用类型则在堆上分配然后由GC管理

new 操作符编译运行时会做4件事:

1、计算对象占内存大小:包括对象的所有基类定义的所有实例字段需要的字节数,以及类型对象指针和同步块索引(这两个额外成员后面章节会详说)

2、从堆上上分配需要大小的字节数的内存,内存中所有的字节都会清0

3、初始化对象的类型对象指针和同步块索引

4、调用类型构造器初始化定义的实例字段返回引用地址并维护指针NextObjPtr(=当前对象返回的引用地址+当前对象占用的字节数)的值

现在对象是创建好了那它在什么时候回收呢?

因为GC在回收时有个代的概念总共有3代可以理解成把内存分成3段,GC有它的触发条件,最常见的触发条件是0代对象内存分配超过预算就会触发GC:

0代分配一个新对象超过预算后,就会触发一次垃圾回收,GC时会暂定该程序进程中的所有线程,并遍历该程序堆中的所有对象,如果有正在运行字段引用了该对象,就在该对象的同步块索引的最后一位标记1,然后将0代所有不是1的对象都回收掉(重写析构函数的不会回收掉)

第1次回收前 

第0代
ABCDE 

然后存活下来的对象A B D提升到第1代

第1次回收后

第1代第0代 
ABD      

0代再次分配一个新对象超过预算后

第2次回收前

第1代第0代 
ABDFGHIJ 

存活下来的对象F G I 提升到了第一代 对象A D已经没有活动的字段引用但是第1代没有触发回收条件所以A D不会被回收,所以无用的老对象可能存活的时间可能比无用的新对象要久

第2次回收后

第1代第0代 
ABDFGI      

0代再次分配一个新对象超过预算后,此时第1代内存分配也超出预算,同时对象G也已经没有活动的字段引用

第3次回收前

第1代第0代 
ABDFGIJKLMN 

1代存活的提升到了第2代,0代存活的提升到了第1代

第3次回收后

第2代第1代第0代 
BFIJKLN      

除了常见的0代超预算,还有以下4种情况会触发GC

1、代码显示调用System.GC的静态Collect方法

2、Windows报告低内存的情况

3、CLR正在卸载AppDomain

4、CLR正在关闭

注意一般小对象会优先分配在0代上如果一个对象超过或等于85000字节会直接分配在第2代上,然后从上面的图可以看到每次垃圾回收后对象的位置都在变化,所以对象的引用地址在每次垃圾回收后是会变化的,如果不希望它的引用地址发生变化可以通过GCHandler设置属性为Pinned,但这样会导致内存碎片。

http://www.lryc.cn/news/184354.html

相关文章:

  • 超大视频如何优雅切片
  • 计算机竞赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
  • Spring总结的question
  • LVS和keepalived
  • 2023年腾讯云优惠券(代金券)无门槛领取方法汇总
  • linux scsi命令读取文件
  • c#设计模式-行为型模式 之 策略模式
  • 【拿完年终奖后】想要转行网络安全,一定不要错过这个时间段。
  • day10_复习_数组_方法
  • Linux:TCP三握四挥简析
  • 2023年全球市场数字干膜测量仪总体规模、主要生产商、主要地区、产品和应用细分研究报告
  • Python爬虫脚本的基本组成
  • IIS部署Flask
  • 告警繁杂迷人眼,多源分析见月明
  • 【Python】概述
  • MySQL运维之日志管理
  • Yolov5 ONNX导出报错: export failure: Unsupported ONNX opset version: 17
  • 2023年全球市场儿科PICC导管总体规模、主要生产商、主要地区、产品和应用细分研究报告
  • Adler-32算法使用Neon优化
  • 数据结构-----平衡二叉树
  • vue3 keepalive翻页保存页面状态
  • 测试工程师思维学习
  • 前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(六)
  • 云硬盘和物理硬盘的区别
  • 数据分析--观察数据处理异常值
  • vue3+elementPlus el-input的type=“number“时去除右边的上下箭头
  • 华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 IK分词器的安装和使用
  • 加密货币交易技巧——人和(一)
  • 数学建模:最优化问题及其求解概述
  • 企业办理CS资质,怎么选择办理等级?