快捷搜索:

.Net Discovery系列之十-深入理解平台机制与性能影

在本文中将对曩昔所讲的.Net平台常识做一个小小的总结与机制阐发,引出并重点先容这些机制对法度榜样机能的影响与改进建议。

本文将分为四部分,分手讲述了:垃圾收受接收机制、即时编译机制、非常处置惩罚机制、字符串驻驻留机制的道理与机能改进建议。《.Net Discovery》系列的每篇文章撰写耗时都在2天以上,转载时麻烦闻名作者Aicken(李鸣),并且未经作者批准,禁止统统商业用途!

一.关于垃圾收受接收机制

● 机制阐发

垃圾网络器是.Net平台的一个特点,它自动收受接收托管堆上不再应用的工具,及时清理内存,这统统都是对开拓职员透明的,当然你也可以手动把它召唤出来,它的本色便是跟踪所有被引用到的工具,收拾工具不再被引用的工具,收受接收响应的内存。垃圾网络机制采纳“标记与清除(Mark Sweep)”算法来完成上述义务,全部历程分为两步:

Step 1.Mark-Sweep :从利用法度榜样的root启程,使用互相引用关系,遍历其在Heap上动态分配的所有工具,指明必要收受接收的工具,标记出那些存活的工具,予以标记。

Step 2.Compact: 对内存中存活的工具进行移动,改动它们的指针,使之在内存中继续,这样余暇的内存也就继续了,即完成了内存释下班作,也办理了内存碎片问题,这个历程也可以成为指针的压缩。

垃圾网络器一样平常将托管堆中的工具分为3代,这可以经由过程调用GC.MaxGeneration得知,工具按照存在光阴是非进行分代,最短的分在第0 代,最长的分在第2代,第2代中的工具每每是对照大年夜的,第二代空间被称作Large Object Heap,对付2代工具的收受接收,与第0、1代收受接收要领比拟最大年夜的不合在于,没有了指针移动的压缩历程。

如下图,第一次GC时,左边第一列A-F表示内存中的工具,位于浅蓝色区域,颠末Mark后,ACDF标记为可用,Sweep历程清除了BE,Compact历程移动了ACDF,使之位于继续存储区域中;第二次应用绿色做标记;第三次GC应用蓝色表示标记;可以看出第三次GC历程没有了指针移动的压缩历程。

您可能还会对下面的文章感兴趣: