首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NetFramework 4.8和.Net 5之间的垃圾收集行为差异

.Net Framework 4.8和.Net 5之间的垃圾收集行为有以下差异:

  1. .Net Framework 4.8垃圾收集行为:
    • 基于传统的垃圾收集机制,使用的是基于代数收集器的分代垃圾收集算法。
    • 分代垃圾收集器将堆内存划分为三代:0代、1代和2代。0代是新创建的对象,1代是已经存活一段时间的对象,2代是存活时间更长的对象。
    • 4.8版本的垃圾收集器采用了非压缩堆(non-compacting heap)的机制,即堆中的对象在进行垃圾收集时不会被移动,导致堆内存空间碎片化。
    • 垃圾收集器使用的是标记-清除(mark-and-sweep)算法,即标记出所有存活的对象,然后清除未标记的对象。
    • 4.8版本的垃圾收集器在进行垃圾收集时会产生停顿,即应用程序的执行会暂停一段时间。
  • .Net 5垃圾收集行为:
    • 引入了新的垃圾收集器,即Server垃圾收集器(Server GC)和Workstation垃圾收集器(Workstation GC)。
    • Server GC适用于多处理器的服务器场景,而Workstation GC适用于单处理器或者少量处理器的工作站场景。
    • 新的垃圾收集器采用了压缩堆(compacting heap)的机制,即进行垃圾收集时会移动存活的对象,使堆内存空间得到整理,减少堆内存碎片化问题。
    • 5版本的垃圾收集器引入了增量式垃圾收集(incremental garbage collection)的概念,即将垃圾收集的过程分为多个阶段,分散在应用程序执行的间隙进行,减少了长时间的停顿。
    • 新的垃圾收集器在运行时会自动选择使用Server GC还是Workstation GC,提供了更好的性能和灵活性。

总结: .Net Framework 4.8和.Net 5之间的垃圾收集行为存在一些差异。.Net Framework 4.8使用基于代数收集器的分代垃圾收集算法,采用非压缩堆的机制,使用标记-清除算法,可能会导致堆内存碎片化,并且在垃圾收集过程中产生停顿。而.Net 5引入了新的垃圾收集器,采用压缩堆的机制,引入了增量式垃圾收集的概念,能根据场景选择Server GC或Workstation GC,提供了更好的性能和灵活性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 程序的编译过程

Microsoft.NET.Sdk.WindowsDesktop 的 Sdk 包含 WPF 项目的编译过程。...而在 MarkupCompilePass1 和 MarkupCompilePass2 之间,则插入了 GenerateTemporaryTargetAssembly 这个编译目标。...新生成的临时项目文件相比于原来的项目文件,包含了这些修改: 添加了第一轮 XAML 编译传递(MarkupCompilePass1)时生成的 .g.cs 文件; 将所有引用方式收集到的引用全部换成 ReferencePath...,这样就可以避免临时项目编译期间再执行一次 ResolveAssemblyReference 编译目标来收集引用,避免降低太多性能。...以下是我在示例程序中抓取到的临时生成的项目文件的内容,与原始项目文件之间的差异: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

47230

制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

在那篇博客中,我们解释到新生成的项目文件会使用 ReferencePath 替代其他方式收集到的引用,这就包含项目引用和 NuGet 包的引用。...以下是我在示例程序中抓取到的临时生成的项目文件的内容,与原始项目文件之间的差异: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...;正常的编译上下文编译到 MarkupCompilePass1 和 MarkupCompilePass2 之间的 GenerateTemporaryTargetAssembly 编译目标时,会插入一段临时项目文件的编译...ReferencePath,传入了 @(ReferencePath),也就是目前已收集到的所有引用文件的路径。...我们选用这个之间的时机刚好可以在产生 _GeneratedCodeFiles 集合之后修改其内容。

49140
  • 用 WiX 制作安装包:为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查

    虽然我们前面选择的 C:\Program Files (x86)\WiX Toolset v3.11\bin 看起来是个绝对路径,但实际上在 wixproj 项目里记录的是一个属性引用,因此可以很容易在团队成员之间共享和跨版本迁移...[CDATA[ 和 ]]> 包裹起来了,避免判断条件中出现了一些会破坏 XML 语法的字符(如 等)出现导致意外的问题(但实际上在本例中,我们只用了字母和下划线,所以你也可以直接写 WIX_IS_NETFRAMEWORK...我整理成下表,方便大家根据自己的需要查阅: .NET Framework 版本 对应判断属性 4.8 WIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED 4.7.2 WIX_IS_NETFRAMEWORK...WiX 3 不支持 .NET Core 3.x、.NET 5 以及 .NET 6 的判断。...测试效果 现在,编译 MSI 项目,然后运行输出目录下的 msi 文件,你会……呃……看不到任何效果……因为我们的开发机上具备 .NET Framework 4.8 的环境,可完美运行 .NET Framework

    1.2K30

    TP5和TP6版本之间的差异,以及TP6新特性

    TP5和TP6版本之间的差异: ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级 ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进...,并更加规范化 1 目录结构的异同 tp5核心框架是项目根目录thinkphp下 , tp6是vendor的topthink 2 安装方式不同,tp6仅能通过composer方式安装 3 类自动加载方式不同...tp6使用composer方式实现类自动加载, tp5 composer+自己实现了一套 4 tp6使用了php7严格模式 5 TP6支持更多的PSR规范 https://learnku.com/docs...SESSION机制改进 缓存及日志支持多通道 引入Filesystem组件 对Swoole以及协程支持改进 对IDE更加友好 统一和精简大量用法 ———————————————— 版权声明...原文链接:https://blog.csdn.net/sangkaixin1/article/details/120172522 未经允许不得转载:肥猫博客 » TP5和TP6版本之间的差异,以及TP6

    1.9K30

    垃圾收集策略静态内存分配和回收动态内存分配和回收1 Java堆内存的回收2 回收无效对象的过程3 方法区的内存回收4 垃圾收集算法5 Java中引用的种类

    堆和方法区的内存回收具有不确定性,因此垃圾收集器在回收堆和方法区内存的时候花了一点心思. 1 Java堆内存的回收 1.1 判定回收的对象 在对堆进行对象回收之前,首先要判断哪些是无效对象即一个对象不被任何对象或变量引用...两者对比 引用计数法虽然简单,但存在无法解决对象之间相互循环引用的严重问题,且伴随加减法操作的性能影响....,那么在堆中就会有一个代表该类的对象:java.lang.Class.这个对象在类被加载进方法区的时候创建,在方法区中该类被删除时清除. 4 垃圾收集算法 知道了判定方法,也就知道了垃圾收集器会清除哪些数据...根据对象存活周期的不同将Java堆划分为老年代和新生代,根据各个年代的特点使用最佳的收集算法....老年代中对象存活率高,无额外空间对其分配担保,必须使用"标记-清理"或"标记-整理" 新生代中存放"朝生夕死"的对象,用复制算法,只需要付出少量存活对象的复制成本,就可完成收集 5 Java中引用的种类

    1.1K101

    C# -多线程任务 Task

    本文链接:https://blog.csdn.net/weixin_42514606/article/details/100532531 背景 公司的自动化测试平台是 C# 语言的,因此有幸学习下 c...开启一个新线程,线程不做任何操作,都要消耗1M左右的内存,所以是伪多线程,感觉就是在一个cpu上一个一个的执行,和之前的顺序有差别。 ?...view=netframework-4.8 ThreadPoll是线程池 其目的是为了减少开启新线程消耗的资源(使用线程池中的空闲线程,不必在开启新线程,以及统一管理线程(线程池中的线程执行完毕后,...Task Task的背后的实现也是使用了线程池线程,但它的性能优于ThreadPoll,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。...view=netframework-4.8 创建一个task也有3种方式来操作,Task.Factory.StartNew()、Task run()、new Task(), 前面2种是一样的,不需要用

    3.5K102

    3.Prometheus监控入门之指标与标签使用说明

    (Prometheus本身使用秒、毫秒、微秒和纳秒作为指标名称) 6) 库: 指标名称是个有效得全局命名空间它可以避免库之间得冲突并指出指标出处,如prometheus_http_requests_total.../net/ip_vs 中收集 IPVS 状态信息,从 /proc/net/ip_vs_stats 获取统计信息 Linux ksmd 从 /sys/kernel/mm/ksm 中获取内核和系统统计信息...从 systemd 中收集设备系统状态信息 Linux tcpstat 从 /proc/net/tcp 和 /proc/net/tcp6 收集 TCP 连接状态信息 Linux wifi Exposes....NET Framework CLR Exceptions netframework_clrinterop .NET Framework Interop Metrics netframework_clrjit....NET Framework JIT metrics netframework_clrloading .NET Framework CLR Loading metrics netframework_clrlocksandthreads

    5K10

    .NET Core 3和对Windows桌面应用程序的支持

    有一些是值得明确指出的: 性能改进和其他运行时更新,会让你的用户高兴 非常容易使用或测试新版本的 支持机器全局和应用程序本地部署 在Visual Studio中支持.NET核心CLI工具和sdk样式的项目...我们还宣布将在.net Core 3.0和.net Framework 4.8中加入一系列的改进: 访问完整的Windows 10(即“WinRT”)API。....NET Framework 4.8 在一周前发布了.net Framework 4.7.2之后,我们还将公布我们的netframework 4.8开发计划。我们预计在12个月内发布下一个版本4.8。...今天的新闻展示了Windows桌面应用的巨大投资和承诺。您可以期待我们在2019年发布两个版本,net Core 3和.net Framework 4.8。...这两个版本之间共享了许多特性,而其他一些特性仅在.net Core 3中可用。我们认为,这种共性和差异为桌面应用程序的发展和现代化提供了大量的选择。 现在是成为.net开发人员的激动时刻。

    2.2K40

    .NET 体系概览图集- 2024 最全总结

    .NET Core(Core1/2/3,5/6/7/8/9):从2016年发布首个.NET Core1,和后面的.NET Core2/3、.NET 5/6/7/是一个体系的,只是从.NET5开始更改了命名...垃圾回收器GC(Garbage Collector):负责整个.NET运行时托管代码的内存分配与释放任务,它通过一定的优化算法选择收集对象和时间,并进行自动的垃圾收集。...CTS(Common Type System)通用类型系统 微软制定了一个正式的规范来描述类型的定义和行为,这就是通用类型系统 (Common Type System,CTS)。...Core CLR 是一个跨平台的运行时,移植了 .NET Framework 的 CLR 的功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境...DLL:Dynamic Link Library,动态链接库,包含了已编译的C#代码、元数据和资源,可以在多个应用程序之间共享和重用。

    1.2K10

    .NET Glossary

    这实现了不同平台上的应用程序之间的代码重用和一致性。 见平台。 生态系统 用于为给定技术构建和运行应用程序的所有运行时软件、开发工具和社区资源。...它也可能指ASP.NET Core框架库,它构建在 BCL 上并为 Web 应用程序提供额外的 API。 GC 垃圾收集器。 垃圾收集器是自动内存管理的实现。...GC 释放不再使用的对象占用的内存。 请参阅垃圾收集。 伊利诺伊州 中级语言。 更高级别的 .NET 语言(例如 C#)编译为与硬件无关的指令集,称为中间语言 (IL)。...示例:ASP.NET、Windows 窗体和 WPF 包含在 .NET Framework 和 .NET 5+ 中。 可选的,开发工具。一些开发工具在多个实现之间共享。...NET Framework 的当前版本是 4.8。 请参阅.NET 文档。 .NET 命令行界面 用于为.NET 5(和 .NET Core)及更高版本开发应用程序和库的跨平台工具链。

    76610

    CLR与JVM

    首先要纠正垃圾回收在于JVM和.NET的CLR的平台功能而不是语言本身。 存在一些历史差异主要是因为.Net的设计是从java(和其他基于gc的平台)演变中吸取教训改良后的结果。...CLR一开始就设计成了分代垃圾回收,但是初始JVM没有分代垃圾收集器。第一代的JVM垃圾收集器往往是Mark和Sweep这样简单。...真正为何引发性能问题而往往被忽视,到最后还是不得不去寻找问题根源 CLR和JVM之间的5个相似点和不同点 CLR和JVM之间的最大相似之处包括: ● 两台虚拟机(VM) ● 两者都包括垃圾收集...Windows兼容(已发布多年的.netcore和将来的.net5都是跨平台),JVM适用于所有主要操作系统 ● CLR使用JIT编译器,JVM使用称为Java HotSpot的专用JIT编译器 ●...最后的想法 在最高级别查看这些VM,CLR和JVM之间的差异似乎几乎可以忽略不计。但是,在许多(如果不是大多数)情况下,VM级别的差异反映了使用它们的语言之间的主要差异。

    54730

    混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息,无法在 4.0 运行时中加载该程序

    configuration> NETFramework...,Version=v4.8"/> 保存然后重新生成就好啦 生成好后在目录下会出现一个“******.exe.config” 理解就是程序的配置文件...image.png “如果要单独把软件拖出来记得把这个文件也一并拖出哦,不然还会报上面的错误” 这个“*****.pdb”文件是程序数据库(PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量...当用/ZI 或/Zi 编译C/C++ 程序时或用/debug 编译Visual Basic/C#/JScript .NET 程序时将创建PDB 文件。...最关键的是:当程序异常输出异常时,可以准确的输出报错的代码函数与行数 简简单单,记得点赞分享哦

    1K20

    C#.NET.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

    今天Rector就收集整理一些C#/.NET/.NET Core应用程序编程开发中常用的实现定时任务调度的方法或者定时任务调度组件。...view=netframework-4.8 特性 轻量,简单易用 .NET框架内置,无须引用第三方库 不支持Cron表达式 FluentScheduler FluentScheduler是由一位巴西的....Quartz.NET目前的版本是支持跨平台的,即支持.NET和.NET Core的应用程序。...也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等 分布式和集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理 支持Cron表达式 支持以配置文件的方式定制作业调度...开源免费:Hangfire是开源的框架并且对商用免费,只需遵循LGPLv3许可即可 结束语 本文旨在为大家收集整理.NET/.NET Core中常用的定时任务框架和组件,希望对你有帮助。

    3.3K20

    运用R分析全唐诗与全宋词

    分析步骤主要由三部分构成:资料收集、词频统计、对比分析 从网上共搜集唐诗4.8万首,宋词1400首; 进过预处理过程之后,对其进行分词与词频统计,各取其词频数前50的词,罗列如下: 再直观点...在这方面,唐朝诗人和宋朝诗人存在着巨大的差异,差异的来源可能是:宋朝历代皇帝崇尚文人治国、武将的地位相对来说消弱很多,这个时期文人的地位升高、生活相对来说会过的更安逸;而在唐朝,习武参军、沙场成将对普通人来说仍然是通往仕途的一个不错选择...我收集整理了从先秦时期(公元前250左右)到晚清时期(公元1900年左右)的各朝代的诗词歌赋(注:这里不包含史料、小说等素材),具体数量可能和真实情况有所出入,比如朝代越久远,遗留下来的诗词可能越少,同时收集不一定全面准确...(5)文字记录、传播方式的影响,在中国历史早期,文字主要记录靠竹片、布帛完成,记录昂贵且传播不易,因此,因此文人创作主要借助短小的诗词完成,在后期,印刷造纸发明后,记录和传播变得廉价方便,一部分文人创作开始由诗词转向小说...(http://blog.csdn.net/zbc1090549839/article/details/37937123)

    1.6K40

    ef+Npoi导出百万行excel之踩坑记

    背景::工头:“小钟啊,xx界面加个导出excel功能03以后的格式,需要能支持到excel的最大行,同时需要5个并发就行” 我:“收到,但是数据大的时候速度可能比较慢。”...我们有个大胆的想法是文件占用问题,应该是创建文件的时候文件已经存在了,这样我们把npoi的dll打开来看看,通过看源码和各种f12我们看到了这么一段代码 ?...这里看到用来随机数,而我们知道net的随机数在极短的时间内生成是不可靠的(详见百度或者: https://docs.microsoft.com/zh-cn/dotnet/api/system.random...2Fdev16.query%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(System.Random.%2523ctor);k(TargetFrameworkMoniker-.NETFramework...,Version%3Dv4.0);k(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.8)也就是说生成一样的文件名,然后我们在通过 github里可以看到

    1.4K20
    领券