当前位置:首页 > 科技  > 软件

.Net8 GC堆对于云原生的支持

来源: 责编: 时间:2023-10-08 07:05:25 173观看
导读1.前言云原生跟人工智能可能是未来的方向,.Net8里面为了对于提高云原生支持的成本效益。可以通过GC降低内存限制来缩减资源消耗以及扩展内存资源提升性能。2.概述.Net8之前进行此操作会失败,因为GC并没有支持。.Net8则

1.前言

云原生跟人工智能可能是未来的方向,.Net8里面为了对于提高云原生支持的成本效益。可以通过GC降低内存限制来缩减资源消耗以及扩展内存资源提升性能。gRG28资讯网——每日最新资讯28at.com

2.概述

.Net8之前进行此操作会失败,因为GC并没有支持。.Net8则进行了一定程度的支持,可以调用_RefreshMemoryLimit API来使用新的内存限制更新GC。gRG28资讯网——每日最新资讯28at.com

反射调用此API:gRG28资讯网——每日最新资讯28at.com

MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(    "_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);refreshMemoryLimitMethod.Invoke(null, Array<object>.Empty);

以上代码调用之后,它可以自动缩减与扩展云原生相关的内存堆大小。以便更好适应云原生。gRG28资讯网——每日最新资讯28at.com

还可以刷新与内存限制相关的一些 GC 配置设置。以下代码片段将堆硬限制设置为 100 兆字节 (MiB):gRG28资讯网——每日最新资讯28at.com

AppContext.SetData("GCHeapHardLimit", (ulong)100 * 1024 * 1024);MethodInfo refreshMemoryLimitMethod = typeof(GC).GetMethod(    "_RefreshMemoryLimit", BindingFlags.NonPublic | BindingFlags.Static);refreshMemoryLimitMethod.Invoke(null, Array<object>.Empty);

在使用此API之前,它有几个限制,需要注意下
1.由于_RefreshMemoryLimit API是专用的,因此需要通过专用反射来调用它。
2.不支持32位平台,比如windows/linux的32位或者arm32指令集。
3.调用此API不一定能成功,因为如果限制或者扩展GC内存过于激进的话,它会返回失败。如果出现这种情况,请考虑调用 gRG28资讯网——每日最新资讯28at.com

GC.Collect(2, GCCollectionMode.Aggressive) 以收缩当前内存使用量,然后重试。
4.如果纵向扩展内存限制超出GC认为进程在启动期间可以处理的大小,则_RefreshMemoryLimit 调用将成功,但它使用的内存不能超过它所认为的限制。gRG28资讯网——每日最新资讯28at.com

3.原理

_RefreshMemoryLimit实际调用的是QCall也即是GCInterface_RefreshMemoryLimit。而后者里面刷新了GC堆动态和静态数据,以便适应C#源码层面适配的云原生扩展和伸缩。gRG28资讯网——每日最新资讯28at.com

GCHeapUtilities::GetGCHeap()->RefreshMemoryLimit();

然后gRG28资讯网——每日最新资讯28at.com

int gc_heap::refresh_memory_limit(){    refresh_memory_limit_status status = refresh_success;    if (GCConfig::GetGCTotalPhysicalMemory() != 0)    {        return (int)status;    }    GCToEEInterface::SuspendEE(SUSPEND_FOR_GC);    //此处生路一万行    }

我们看到它挂起了其它线程的操作,进行了GC的SuspendEE操作。停止了其它线程,以便操作当前线程。gRG28资讯网——每日最新资讯28at.com

参考:https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-8#garbage-collectiongRG28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12305-0.html.Net8 GC堆对于云原生的支持

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 解密前端三巨头:HTML、CSS和JavaScript的关系

下一篇: Vite也要用Rust重写了,推荐一波开源的 Rust 学习资源!

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • CSS单标签实现转转logo

    CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Flowable工作流引擎的科普与实践

    Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 微软发布Windows 11新版 引入全新任务栏状态

    微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会隆重举行

    2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会隆重举行

    9月18日,2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会在青岛国际新闻中心隆重举行。发布会上青岛市政府领导联袂出席,对本次双展会情
Top