.NET Core垃圾收集
在本章中,我们将介绍垃圾收集的概念,垃圾收集是.NET托管代码平台最重要的特性之一。 垃圾收集器(GC)管理内存的分配和释放。 垃圾收集器用作自动内存管理器。
- 我们不需要知道如何分配和释放内存或管理使用该内存的对象的生命周期
- 每当使用
new关键字声明对象或将值类型装箱时,都会进行分配。分配通常非常快。 - 当没有足够的内存分配一个对象时,GC必须收集和处理垃圾内存以使内存可用于新的分配。
这个过程被称为垃圾收集。
垃圾收集的优势
垃圾收集提供以下好处(优势) -
- 在开发应用程序时,不需要手动释放内存。
- 它还有效地在托管堆上分配对象。
- 当对象不再使用时,它将通过清除内存来回收这些对象,并将内存保留为将来的分配。
- 托管对象自动获得干净的内容,所以它们的构造函数不必初始化每个数据字段。
- 它还通过确保对象不能使用其他对象的内容来提供内存安全性。
垃圾收集的条件
垃圾收集在下列条件之一时发生:
- 当系统的物理内存较低时。
- 托管堆上分配的对象使用的内存超过了可接受的阈值。该阈值在流程运行时不断调整。
GC.Collect方法被调用,在几乎所有情况下,不必调用此方法,因为垃圾收集器连续运行。这种方法主要用于独特的情况和测试。
阶段过程
.NET垃圾收集器有3代,每一代都有自己的堆,用于存储分配的对象。有一个基本的原则,判定大多数对象是短暂的还是长期的。
1. 第一代(0)
- 在第
0代中,首先分配对象。 - 在这一代,对象通常不会超越第一代,因为在下一次垃圾收集时,它们不再被使用(超出范围)。
0代很快收集,因为它相关的堆很小。
2. 第二代(1)
- 在第一代,对象有第二个机会空间。
- 在第
0代收集(通常是基于巧合的时机)下寿命很短的对象会转到第1代。 - 第一代集合也很快,因为它的关联堆也很小。
- 前两堆仍然很小,因为对象被收集或提升到下一代堆。
3. 第三代(2)
- 在第二代,所有的长对象都是活动的,它的堆可以长得很大。
- 这一代的对象可以长期存活下去,没有下一代堆积对象可以进一步推广。
- 垃圾收集器有一个额外的堆,用于称为大对象堆(LOH)的大型对象。
- 它保留
85,000字节或更大的对象。 - 大对象并没有分配到代代堆,而是直接分配给了LOH
- 第二代和LOH收集可能会花费很长时间运行的程序或运行大量数据的程序。
- 已知大型服务器程序在十几个GB中堆积如山。
- GC采用各种技术来减少阻止程序执行的时间。
- 主要方法是在后台线程上尽可能多地执行垃圾回收工作,而不会干扰程序执行。
- GC还为开发人员提供了一些方法来影响其行为,这对提高性能非常有用。
来源:BootWiki
链接:https://www.bootwiki/netcore/dotnet_core_garbage_collection.html
著作权归作者所有
商业转载请联系作者获得授权,非商业转载请注明出处
.NET Core垃圾收集的更多相关文章
- ASP.NET Core 性能优化最佳实践
本文提供了 ASP.NET Core 的性能最佳实践指南. 译文原文地址:https://docs.microsoft.com/en-us/aspnet/core/performance/perfor ...
- DotNet Core 介绍
前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...
- 微软开源.NET Core的执行引擎CoreCLR{转载}
继去年12月宣布.NET Core开源之后,微软拥抱开源的决心又向前迈了一步,Microsoft于昨日在 .NET Framework Blog上 宣布开源.NET Core 的执行引擎 CoreCL ...
- ASP.NET Core 四种释放 IDisposable 对象的方法
本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...
- 是什么优化让 .NET Core 性能飙升?
.NET Core(开放源代码,跨平台,x-copy可部署等)有许多令人兴奋的方面,其中最值得称赞的就是其性能了. 感谢所有社区开发人员对.NET Core做出的贡献,其中的许多改进也将在接下来的几个 ...
- 讨论.NET Core 配置对GC 工作模式与内存的影响
引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析 https://mp.weixin.qq.com/s/PqhUzvFpzopU7rVRgdy7eg 这篇文章中 ...
- 给外行或者刚入门普及一下关于C#,.NET Framework(.NET框架),.Net,CLR,ASP,ASP.Net, VS,以及.NET Core的概念
一.概念 1. C# :C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言. 2..NET Framework(.NET框架):.NET framework ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...
- 【转载】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
本文转载自:http://www.cnblogs.com/1996V/p/9037603.html [尊重作者原创,转载说明出处!感谢作者“小曾看世界”分享! ] 什么是.NET?什么是.NET Fr ...
随机推荐
- FA转发地址
1.FA地址诞生背景和作用 FA 是Forwarding Address的简写.FA是ASBR通告的TYPE 5 LSA中的字段,它的作用是告诉OSPF域内的路由器如何能够更快捷地到达LSA 5所通告 ...
- python08篇 发邮件和异常处理
一.发邮件 import yamail smtp = yamail.SMTP(host='smtp.qq.com', # 改成自己邮箱的服务器即可,其他的比如smtp.163.com user='65 ...
- 团队nabcd(校园大事件)
我们团队项目名称是TD校园通,作为辅助功能校园大事件,一样是一个亮眼的功能. 我们的大事件功能主要解决了大家qq微信群聊过多,信息杂,很多时候错过了校园内的大事件,错失了好的活动的痛苦. 我们计划在主 ...
- Linux上生产环境源码方式安装配置postgresql12
1.Linux上源码方式安装postgresql12 01.准备操作系统环境 echo "192.168.1.61 tsepg61" >> /etc/hosts mou ...
- Odoo ORM研究2 - BaseModel中的常用方法分析
今天继续研究ORM的BaseModel,昨天研究了一下所有常用属性的具体用法,那么今天研究一下BaseModel中一些常用的方法,我们学会它们并灵活的应用它们,可以为我们开发解决很多的问题. odoo ...
- File类与常用IO流第三章IO流概述
一:以内存为基准,按照数据的流动方向,流向内存为输入(读取数据),流出内存为输出.IO流有四大顶级父类: IO流四大顶级父类 输入流 输出流 字节流 字节输入流 InputStream 字节输出流 ...
- 微信小程序云开发-云函数-初始化云函数环境
一.新建云函数文件夹 新建的云函数文件夹,命名为cloud,该文件夹一定要与pages文件夹同级.此时该文件夹的前面没有云朵的标识. 二.配置project.config.json文件 在proje ...
- Linux chgrp命令的使用
Linux chgrp(change group)命令用于变更文件或目录的所属群组. 语法 chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 ch ...
- Python 数值中的下划线是怎么回事?
花下猫语:Python 中下划线的用法令人叹为观止,相信你已在各种文章或教程中见识过了.在 2016 年的 3.6 版本之后,Python 还引入了一种新的语法,使得下划线也可以出现在数值中.这篇翻译 ...
- mapGetters 的作用__为什么mapGetter前面有...(三个点是去掉{}的作用)
参考:vuex 中关于 mapGetters 的作用 mapGetters 工具函数会将 store 中的 getter 映射到局部计算属性中.它的功能和 mapState 非常类似,我们来直接看它的 ...