C#面试常考随笔15:C#的GC原理是什么?

ops/2025/2/6 8:35:55/

基本概念

  • 托管堆:在 C# 中,对象的内存分配主要发生在托管堆上。当创建一个对象时,CLR 会在托管堆上为其分配一块连续的内存空间。
  • 引用计数:引用计数是一种简单的内存管理方法,它通过记录每个对象被引用的次数来判断对象是否可以被回收。当引用计数为 0 时,对象就可以被回收。但 C# 的 GC 并没有采用这种方法,而是使用了标记 - 清除和分代回收算法

标记 - 清除算法

这是 GC 的核心算法之一,主要分为两个阶段:标记阶段和清除阶段。

标记阶段
  • 根对象:GC 会从一组根对象开始,根对象是指那些始终可达的对象,例如全局变量、静态变量、当前执行方法的局部变量等。
  • 标记过程:GC 会遍历所有的根对象,并递归地标记所有从根对象可达的对象。被标记的对象表示它们仍然在被使用,不能被回收。
清除阶段
  • 清除过程:在标记阶段完成后,GC 会遍历整个托管堆,将所有未被标记的对象视为垃圾对象,并回收它们所占用的内存空间。

分代回收算法

C# 的 GC 采用了分代回收的策略,将对象分为不同的代(Generation),目前有三代:第 0 代(Gen 0)、第 1 代(Gen 1)和第 2 代(Gen 2)。

代的划分原则
  • 第 0 代:新创建的对象通常被

http://www.ppmy.cn/ops/156103.html

相关文章

STM32 TIM编码器接口测速

编码器接口简介: Encoder Interface 编码器接口 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度 每个高级定…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript

二、HTML 中的 JavaScript 将 JavaScript 插入 HTML 的主要方法是使用<script>元素。 <script>元素有下列 8 个属性。 async&#xff1a;可选。表示应该立即开始下载脚本&#xff0c;但不能阻止其他页面动作&#xff0c;比如下载资源或等待其他脚本加载。只对外部…

本地Apache Hive的Linux服务器集群复制数据到SQL Server数据库的分步流程

我们已经有安装Apache Hive的Linux服务器集群&#xff0c;它可以连接到一个SQL Server RDS数据库&#xff0c;需要在该Linux服务器上安装配置sqoop&#xff0c;然后将Hive中所有的表数据复制到SQL Server RDS数据库。 以下是分步指南&#xff0c;用于在Linux服务器上安装配置S…

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了&#xff0c;抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…

将音频mp3文件添加背景音乐

你可以使用 Python 的 pydub 库来合成两个音频文件&#xff0c;并调整背景音乐的音量&#xff0c;使朗诵的声音更强。以下是实现的 Python 代码&#xff1a; 步骤 读取朗诵音频文件&#xff08;speech.mp3&#xff09;。读取背景音乐文件&#xff08;background.mp3&#xff…

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做

在当今多设备、多屏幕尺寸的时代&#xff0c;网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求&#xff0c;响应式设计&#xff08;Responsive Web Design&#xff09;应运而生&#xff0c;成为网页设计的趋势和标准。本文将深入探讨响应…

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

4 HBase 的高级 shell 管理命令

4 HBase 的高级 shell 管理命令 1.status 例如&#xff1a;显示服务器状态 hbase(main):058:0> status node012.whoami 显示 HBase 当前用户&#xff0c;例如&#xff1a; hbase> whoami3.list 显示当前所有的表 hbase> list4.count 统计指定表的记录数&#xff0c…