博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET GC 精要(一)
阅读量:4224 次
发布时间:2019-05-26

本文共 1451 字,大约阅读时间需要 4 分钟。

本文讲述了 .NET GC 的一些细节知识,内容大部分来自于书籍

(注:本文假设你了解 .NET 的基础知识,譬如值类型,引用类型等)

基础

稍有 .NET 基础的朋友一定知道 .NET GC 管理的是的内存释放问题,而托管堆又可以进一步分成两类:

  • Small Object Heap(简称 SOH), 即小对象堆,用以存储小于 85000 字节大小的对象
  • Large Object Heap (简称 LOH), 即大对象堆,用以存储大于等于 85000 字节大小的对象(注:这种说法并不准确,但是在基础部分我们可以暂时这么理解)

譬如我们定义了如下类型:

class MyClass{    string Test = "Hello world Wazzup!";    byte[] data = new byte[86000];}

可以看到上面定义的 MyClass 类型的 Test 成员是带有 19 个字符的字符串,应该存储于 SOH, 而其 data 成员是一个 86000 大小的字节数组,应该存储于 LOH, 当然 MyClass 实例本身只是存储了两个引用,应该存储于 SOH,所以 MyClass 的内存分布如下图所示:

在这里插入图片描述

.NET GC 的流程在原理上其实还是比较简单的: 首先从 GC roots(GC 根)处开始遍历对象间的引用关系,并对遍历到的对象进行标记,遍历完成之后,我们对没有标记的对象进行清理(即将其从 SOH 和 LOH 中去除),然后整个 GC 流程便完成了.

其中提到的所谓 GC roots(GC 根),包括以下几个部分(注:以下总结的并不全面,但是在基础部分我们可以暂时这么理解):

  • global/static object references(全局/静态对象引用)

  • CPU registers(CPU 寄存器)

  • object finalization references(对象终结器相关引用)

  • Interop references(互操作相关引用)

  • stack references(栈引用)

而对于 GC 流程中最后的清理操作(将对象从 SOH 和 LOH 中去除),其实细节上还是比较复杂的,这次我们先简单讲讲 SOH:

正如之前所说, SOH 用以存储小对象,而小对象的申请与释放在一般的程序中是比较频繁的, 为了优化小对象的申请速度, SOH 是以内存连续的方式存储对象的,并且维护了一个称为 Next Object Pointer(NOP) 的引用,用以指示下一个可用的内存位置,通过 NOP,当遇到新的对象申请时, SOH 就可以快速的获取到可用的内存位置,这里贴个示意图:

在这里插入图片描述

SOH 的这种连续存储对象的方式虽然在申请对象时非常快速,但是在释放对象的时候却会遇到问题,考虑上面示意图中的对象A(Object A),因为没有被引用的关系,其会在 GC 流程中被清除,但是一旦其被清除,其所占用的内存对于 SOH 来说就不可用了(因为 SOH 通过 NOP 获取可用的内存位置),这就产生了内存碎片问题,为了解决这个问题, SOH 在清理的过程中会进行内存压缩(memory compaction),方法上就是将标记的对象移动到未标记的对象内存处(并处理一些内存空隙问题),用以保持 SOH 中内存的连续,仍然拿之前的示意图举例,经过 GC 清理及内存压缩处理之后, 上面的 SOH 大概如下图所示:

在这里插入图片描述

未完待续(to be continued)

转载地址:http://unzqi.baihongyu.com/

你可能感兴趣的文章
干货 | 6 种激活函数核心知识点,请务必掌握!
查看>>
TensorFlow超级指南 | 你能想到的TF教程和资源都在这里(附链接&视频)
查看>>
干货收藏 | 计算机学习绝对不能错过的10大网站(内附网站链接)
查看>>
Kotlin威胁、Python逆袭,2018年程序员需要升级哪些技能?(附报告下载)
查看>>
综述 | 近年来深度学习的重要研究成果(附PDF)
查看>>
2018计算机图形学研究报告(附PDF下载)
查看>>
收藏 | 12个ggplot2拓展程序助你强化R可视化
查看>>
收藏 | 数据分析师最常用的10个机器学习算法!(附图解)
查看>>
收藏 | 15个CNN关键回答集锦,2019校招面试必备!
查看>>
独家|一文解读合成数据在机器学习技术下的表现
查看>>
竞赛 | 上汽拿出了2000辆车的真实数据集,千万级投资+直接录用机会等你来战!...
查看>>
盘点 | 2018全球人工智能突破性技术TOP10(附报告)
查看>>
干货 | 纽约大学陈溪: AlphaGo Zero技术演进的必然性(附PPT)
查看>>
竞赛 | 我们标注了34G真实线下门店数据,等你pick!
查看>>
独家 | 一文带你读懂特征工程!
查看>>
送你8个Python高效数据分析的技巧(附代码)
查看>>
13张动图助你彻底看懂马尔科夫链、PCA和条件概率!
查看>>
关于TensorFlow,你应该了解这9件事(附代码&链接)
查看>>
独家 | 一文读懂PySpark数据框(附实例)
查看>>
清华“法律数据科研平台”向校内师生开放试运行
查看>>