.NET 8 极致性能优化 Non-GC Heap
前言 .NET8里面JIT引入了一个新的机制,叫做Non-GC Heap。JIT可以确保相关对象分配在Non-GC Heap上,该堆像其名称一样,不受GC管理。JIT需要保证这个对象没有被GC引用,并且在这个对象的生命周期内一直是根对象(不会被GC消灭的对象)的状态。原文:.NET8极致性能优化Non-GC Heap 概述 为什么要引入这种机制?先来看一段代码: public static string GetPrefix() => "https://"; static void Main(string[] args) { GetPrefix (); } 这里的GetPrefix函数返回的是一个常量字符串值,它的ASM如下: mov rax,185CAC02068h mov rax,qword ptr [rax] 两个mov指令,第一个是对象指针的指针,第二个是对象的指针。虽然是简单的两个指令,但是背后的逻辑却较为复杂,基本如下: 一个字符串常量值,.NET7里面JIT也会给这个字符串常量值复制到一个堆分配到字符串对象中,返回的是对象的二级指针。因为是堆对象,可...

