当前位置: 首页 > 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,但这样会导致内存碎片。

相关文章:

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

大家都知道.net程序创建对象后没法写代码销毁对象,它有它自己的处理机制,今天来大概说说它的原理,探讨下它是如何管理对象即管理内存的 在程序里使用new 关键字实例化一个对象 如果这个对象类型是引用类型则在堆上分配然后由GC管理 new 操作…...

超大视频如何优雅切片

背景 有一次录屏产生了一个大小为33G的文件, 我想把他上传到B站, 但是B站最大只支持4G. 无法上传, 因此做了一个简单的探索. 质疑与思考 a. 有没有一个工具或一个程序协助我做分片呢? 尝试 a. 必剪 > 有大小限制, 添加素材加不进去(而且报错信息也提示的不对) b. PR &…...

计算机竞赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…...

Spring总结的question

Spring 一. 控制反转(IoC) 1.手动 使用了Spring的Configuration和Bean注解来明确指定了哪些类需要被纳入容器的管理。在AppConfig配置类中,通过Bean注解创建了Service和Controller的实例,Spring会自动将这些实例纳入容器的管理,并处理它们…...

LVS和keepalived

Keepalived及其工作原理 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器&#x…...

2023年腾讯云优惠券(代金券)无门槛领取方法汇总

腾讯云作为国内知名的云计算服务提供商,为了吸引用户,腾讯云经常推出各种优惠活动,其中包括优惠券的免费发放。通过使用优惠券,可以享受到更多的折扣和优惠,节省成本,获得更好的用户体验。那么,…...

linux scsi命令读取文件

SCSI Read(10)是一种用于从SCSI设备读取数据的命令。下面是一个简单的示例代码&#xff0c;演示如何使用SCSI Read(10)命令来读取指定大小的文件&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>#define READ_CAPACITY_CMD 0x2…...

c#设计模式-行为型模式 之 策略模式

&#x1f680;简介 &#x1f424;作为一个开发人员&#xff0c;开发需要选择一款开发工具&#xff0c;如在编写C#时&#xff0c;我们可以选择VisualStudio进行开发&#xff0c;也可以使用Rider 进行开发。 &#x1f433;该模式定义了一系列算法&#xff0c;并将每个算法封装起来…...

【拿完年终奖后】想要转行网络安全,一定不要错过这个时间段。

网络安全&#xff0c;作为当下互联网行业中较为热门的岗位&#xff0c;薪资可观、人才需求量大&#xff0c;作为转行必考虑。 在这里奉劝所有零基础想转行&#xff08;入门&#xff09; 网络安全的朋友们 在转行之前&#xff0c;一定要对网络安全行业做一个大概了解&#xf…...

day10_复习_数组_方法

非常重要的: 方法设计(参数,返回值,调用) 数组也重要,但是后续很少用! 是因为后期有更简单的【集合】&#xff0c;重要在于是一种思想&#xff0c;也是一种代码逻辑 关于数组: 声明创建取值,存值遍历面试|算法 --> 排序内存图(堆,栈,引用) 今天 数组工具类:Arrays数组扩容(拷…...

Linux:TCP三握四挥简析

文章目录 1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端在 LISTEN 状态等待客户端的 SYN 请求3.2.1.4 客户端向服务端发送 S…...

2023年全球市场数字干膜测量仪总体规模、主要生产商、主要地区、产品和应用细分研究报告

内容摘要 按收入计&#xff0c;2022年全球数字干膜测量仪收入大约149.2百万美元&#xff0c;预计2029年达到191.6百万美元&#xff0c;2023至2029期间&#xff0c;年复合增长率CAGR为 3.6%。同时2022年全球数字干膜测量仪销量大约 &#xff0c;预计2029年将达到 。2022年中国市…...

Python爬虫脚本的基本组成

一个基本的Python爬虫脚本通常由以下几部分组成&#xff1a; 导入必要的库&#xff1a;Python中有许多库可用于爬虫&#xff0c;如requests用于发送HTTP请求&#xff0c;BeautifulSoup用于解析HTML或XML&#xff0c;selenium用于模拟浏览器操作等。你需要根据你的需求导入相应…...

IIS部署Flask

启用 CGI 安装wfastcgi pip install wfastcgi 启用 wfastcgi 首先以管理员身份运行wfastcgi-enable来在IIS上启用wfastcgi&#xff0c;这个命令位于c:\python_dir\scripts&#xff0c;也就是你需要确保此目录在系统的PATH里&#xff0c;或者你需要cd到这个目录后再执行。 #…...

告警繁杂迷人眼,多源分析见月明

随着数字化浪潮的蓬勃兴起&#xff0c;网络安全问题日趋凸显&#xff0c;面对指数级增长的威胁和告警&#xff0c;传统的安全防御往往力不从心。网内业务逻辑不规范、安全设备技术不成熟都会导致安全设备触发告警。如何在海量众多安全告警中识别出真正的网络安全攻击事件成为安…...

【Python】概述

【Python】概述 特点 Python 是一种面向对象、解释性、弱类型&#xff08;动态数据类型&#xff09;的脚本语言&#xff08;高级程序设计语言&#xff09;。 由于Python是解释型语言&#xff0c;所以具有跨平台特性。 解释型语言&#xff1a; 这意味着开发过程中没有了编译…...

MySQL运维之日志管理

目录 一、日志 1.1错误日志 1.2二进制日志 1.2.1格式 1.2.2查看 1.2.3删除 1.3查询日志...

Yolov5 ONNX导出报错: export failure: Unsupported ONNX opset version: 17

目录 1.问题描述 1.1 报错1 &#xff1a; 1.2 报错 2 2.解决方案 介绍 ONNX&#xff08;Open Neural Network Exchange&#xff09;是一个用于机器学习模型的开放式标准&#xff0c;它旨在使不同的深度学习框架能够将训练好的模型在不同平台上无缝运行。它是由Microsoft和F…...

2023年全球市场儿科PICC导管总体规模、主要生产商、主要地区、产品和应用细分研究报告

内容摘要 按收入计&#xff0c;2022年全球儿科PICC导管收入大约 百万美元&#xff0c;预计2029年达到 百万美元&#xff0c;2023至2029期间&#xff0c;年复合增长率CAGR为 %。同时2022年全球儿科PICC导管销量大约 &#xff0c;预计2029年将达到 。2022年中国市场规模大约为 百…...

Adler-32算法使用Neon优化

1、简单实现 下面代码是Adler-32算法的简单实现,我们来整理一下这段代码的逻辑: A = 1 + D1 + D2 + ... + Dn (mod 65521)B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 65521)= nxD1 + (n-1) x D2 + (n-2) x D3 + ... + Dn + n (mod 65521)Adler-3…...

使用 Aspen Plus 模拟天然气的自热转化

使用aspen plus模拟天然气的自热转化自热重整工艺消耗蒸汽和氧气&#xff0c;将天然气转化为合成气。 事实上&#xff0c;自热转化工艺是放热的部分氧化&#xff08;POX&#xff09;工艺和内热的蒸汽甲烷转化&#xff08;SMR&#xff09;工艺的结合&#xff0c;从热力学角度中和…...

从零搭建WebRTC信令服务:SpringBoot WebSocket与Vue3的实战协同

1. WebRTC信令服务基础认知 第一次接触WebRTC时&#xff0c;我被它直接建立P2P连接的能力惊艳到了——就像两个陌生人突然跳过所有中间环节直接开始面对面交流。但很快我发现&#xff0c;这种"魔法"背后需要一套精密的协调机制&#xff0c;这就是信令服务的用武之地。…...

COMSOL 钢制支架静态分析:从建模到结果解析

comsol支架-静态分析&#xff0c; COMSOL Multiphysics 和“结构力学模块”中对结构力学问题进行建模的基本原理及操作。 介绍线性静态分析&#xff0c;包括材料属性和边界条件的定义。 在计算出解之后&#xff0c;学习如何分析结果并检查反作用力。 模型是钢制支架。 这种支架…...

795. 广告标识工厂哪家上门维修最及时?

在当今商业社会&#xff0c;广告标识对于企业的品牌展示和宣传起着至关重要的作用。然而&#xff0c;广告标识在使用过程中难免会出现各种问题&#xff0c;这就需要及时的上门维修服务。那么&#xff0c;广告标识工厂哪家上门维修最及时呢&#xff1f;今天就为大家推荐河北兴盛…...

华大单片机实战:MT25QL128/256 FLASH驱动避坑指南(HOLD引脚必看)

华大单片机深度实战&#xff1a;MT25QL系列FLASH驱动设计与HOLD引脚关键配置解析 在嵌入式存储解决方案中&#xff0c;NOR Flash因其高可靠性和快速随机读取特性&#xff0c;成为众多工业级应用的首选。MT25QL系列作为美光推出的高性能SPI NOR Flash产品&#xff0c;凭借其宽电…...

代码重构美学

代码重构美学大赛技术文章大纲大赛背景与意义代码重构的定义及其在软件开发中的重要性美学在代码重构中的体现&#xff1a;可读性、简洁性、可维护性大赛的宗旨&#xff1a;推动高质量代码实践&#xff0c;提升开发者审美与工程能力参赛作品评审标准功能性&#xff1a;重构后代…...

新手福音:基于快马平台和vmware官网快速上手虚拟化编程实践

作为一个刚接触虚拟化技术的新手&#xff0c;最近在浏览vmware官方中文网站时&#xff0c;发现了很多有用的学习资料。但光看理论总觉得不够直观&#xff0c;于是想通过动手实践来加深理解。在朋友的推荐下&#xff0c;我尝试用InsCode(快马)平台来创建一个简单的虚拟机监控面板…...

DTII(A) 9.12.2、带调节挡板漏斗

示意图主视图侧视图C向法兰口Z向&#xff1a;操纵杆安装位置【说明】【表9-48】带调节挡板漏斗相关参数参数说明其它参数同 “普通漏斗”&#xff1b;【L5】调节挡板底座 与 漏斗壁 距离。【260】调节挡板底座长度。【注意】...

保姆级教程:Ollama+EmbeddingGemma-300m,零基础搭建嵌入模型服务

保姆级教程&#xff1a;OllamaEmbeddingGemma-300m&#xff0c;零基础搭建嵌入模型服务 1. 认识嵌入模型与EmbeddingGemma-300m 想象一下&#xff0c;如果你能让计算机真正"理解"文字的含义&#xff0c;而不仅仅是匹配关键词&#xff0c;会怎样&#xff1f;这就是嵌…...

PyCharm运行YOLOv8报错:onnx版本冲突的终极解决方案(附详细步骤)

PyCharm运行YOLOv8报错&#xff1a;onnx版本冲突的终极解决方案&#xff08;附详细步骤&#xff09; 当你在PyCharm中尝试将YOLOv8模型导出为ONNX格式时&#xff0c;突然弹出一条令人头疼的错误信息&#xff1a;module onnx has no attribute __version__。这就像在高速公路上…...