01 2025 档案
摘要:简介 终于来到了GC的最后一个步骤,在此之间,大量预备工作已经完成。万事俱备,只欠东风 清除 如果GC决定不压缩,它将仅执行清除操作。清除操作非常简单,把所有不可到达对象(gap),转换成Free。也就是转换成空闲内存空间。 由于所有的繁重计算任务在plan_phase阶段均已完成,所以步骤比较简单
阅读全文
摘要:简介 在mark_phase阶段之后,所有对象都被标记为有用/垃圾对象。此时,垃圾回收器已经拥有启动垃圾回收的所有前置准备工作。 这个时候,垃圾回收期应该执行"清除回收"还是"压缩回收"呢?只有做一下试验才能得出理论支撑。 模拟压缩 这里会有一个悖论,如果你要知道压缩是否划得来,那你就得先压缩后查看
阅读全文
摘要:简介 C# 采用基于代的回收机制,并使用了更复杂的 链式跟踪算法 来识别对象是否为垃圾。 GC触发的原因 截至到.NET 8,GC触发的原因有18种 enum gc_reason { reason_alloc_soh = 0,//小对象堆,快速分配预算不足 reason_induced = 1,//
阅读全文
摘要:对象分配策略 .NET程序的对象是由CLR控制并分配在托管堆中,如果是你,会如何设计一个内存分配策略呢? 按需分配,要多少分配多少,移动alloc_ptr指针即可,没有任何浪费。缺点是每次都要向OS申请内存,效率低 预留缓冲区,降低了向OS申请内存的频次。但在多线程情况下,alloc_ptr锁竞争会
阅读全文

浙公网安备 33010602011771号