ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

不同发行版 DotNet GC(垃圾回收器)类型如何配置?

2022-02-25 10:30:03  阅读:240  来源: 互联网

标签:工作站 Concurrent GC 发行版 DotNet 服务器 NET CLR


DotNet CLR 目前提供三类GC垃圾回收模式

1、Server.GC(服务器GC)

2、Workflow.GC(工作站GC)[Concurrent GC]

3、Nonconcurrent.GC(非并发GC)[Workflow GC]

2/3皆属于工作站GC大类,是一个非常基础的问题,面试.NET技术人员,应成为基本提问题目。

详细参见 MSDN:

垃圾回收的基本知识 | Microsoft Docs

DotNet CLR 默认应用GC配置为:

Workflow.GC Concurrent,即工作站GC并行模式,不建议.NET桌面应用使用这个模式,其在 .NET 4.0 CLR 上面是会触发崩溃级BUG的,人们无法不通过修改代码重新编译CLR的情况下,解决该类型GC故障,.NET技术用户层面可以采用的崩溃解决办法为:非并发工作站GC模式,或者服务器GC回收模式。

配置为服务器GC

基于:.NET Framework 编译的托管程序,注意是不通过C/C++语言直接调用CLR虚拟机(MSCorEE)ATL接口方式运行的,该方式运行的自行查阅MSDN关于.NET Native CLR接口的文档。

补充:一旦人们开启服务器GC,则需要接受两个悲催的事实,是无法启用 Concurrent GC,它被强制关闭,注意有些人会把这个东西说的有点混淆,本质上 Concurrent GC 是工作站GC,它跟 Server GC 服务器GC是两个不同的东西,配置不共用是可以理解的。

修改运行程序目录下的 AssemblyName.config 文件配置,AssemblyName = .NET程序集名称

<configuration>
<runtime>
   <gcServer enabled="true" />
</runtime>
</configuration>

基于:.NET Core 编译的托管程序,修改运行程序目录内的 AssemblyName.runtimeconfig.*json 文件配置,通常默认的配置大约如下:

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    },
    "configProperties": {
      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
    }
  }
}

开启服务器GC则我们需要调整该配置文件内容到:

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    },
    "configProperties": {
      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
      "System.GC.Server": true
    }
  }
}

OK,那么上面提到了服务器GC在两个不同的.NET平台上面,怎么去进行配置,那么现在就要说到 “工作站GC” 的 Concurrent and Nonconcurrent 设置了。

.NET Framework 上面配置GC为 Nonconcurrent GC

<configuration>
<runtime>
   <gcConcurrent enabled="false" />
</runtime>
</configuration>

.NET Core 上面配置GC为 Nonconcurrent GC

{
  "runtimeOptions": {
    "configProperties": {
      "System.GC.Concurrent": false,
    }
  }
}

标签:工作站,Concurrent,GC,发行版,DotNet,服务器,NET,CLR
来源: https://blog.csdn.net/liulilittle/article/details/123126181

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有