42. 垃圾回收算法:标记清除、分代与增量回收
从可达性分析出发,系统梳理标记-清除、标记-整理、复制三种基础回收算法的取舍,讲透分代假说、TLAB 分配与新生代/老年代布局,深入三色标记、读写屏障与 SATB 快照如何实现并发回收,对照引用计数与循环引用问题,并给出 Go 与 JVM 的 GC 调参实操与性能指标评估。
tag
从可达性分析出发,系统梳理标记-清除、标记-整理、复制三种基础回收算法的取舍,讲透分代假说、TLAB 分配与新生代/老年代布局,深入三色标记、读写屏障与 SATB 快照如何实现并发回收,对照引用计数与循环引用问题,并给出 Go 与 JVM 的 GC 调参实操与性能指标评估。
PHP 内存管理与垃圾回收实战:Zend 内存管理器(chunk/arena/bin)的分配模型、引用计数与释放时机、循环引用导致的泄漏、GC 根缓冲与标记清除算法、gc_enable/gc_probability/gc_mem_caches 配置、用 memory_get_usage 与 Xdebug 定位泄漏、生成器与 SplFixedArray 降内存、常驻进程内存治理策略。
内容寻址意味着 store 从不覆盖旧路径,一次重建就多出一份闭包,磁盘很快被历代产物吃满。回收的唯一依据是 gc root,而不是「看起来没人用」。本文讲清 gc root 的六种来源、手动与自动回收参数、硬链接去重的原理与代价、占用分析方法、结构性瘦身手段,以及误删与存储损坏后的恢复路径。
托管运行时把内存管理交给垃圾回收器,代价是必须理解可达性、根集与暂停。本文讲解标记清除、复制、标记整理三大基础算法,分代假设与晋升策略,三色标记与写屏障,并发与增量 GC 的取舍,以及 STW 暂停的度量与调优手段。
本节拆开 CPython 的引用计数与循环 GC:用 sys.getrefcount 实测引用数随赋值、入容器、传参的增减,看清循环引用为何让 refcount 归零失败;再用 gc 模块实测三代阈值 (2000,10,10)、各代 collect 的回收数、__del__ 与 gc.garbage 的边界,并给出关闭 GC 后循环垃圾堆积的真实 RSS 数字。
系统覆盖 WebAssembly 的 GC 提案(WasmGC):为什么托管语言编译到 WASM 需要 GC、引用类型与结构类型的核心概念(i31ref、struct/array ref、func ref)、GC 指令集与分配语义(struct.new/array.get/ref.cast)、与线性内存的对比(GC 堆 vs 手动管理)、宿主运行时的 GC 集成、各语言的编译路径(JVM/.NET/Kotlin Native/Dart/Swift)、提案状态与支持矩阵(V8/Spidermonkey/Wasmtime/Wasmer)、性能开销与优化方向,以及 GC 与尾调用/栈切换/组件模型的关联,帮助读者理解托管语言如何真正登上 WASM 平台。
NixOS 运维与维护实战:系统升级流程(稳定版/滚动版)、channel 与 flake 升级对比、nixos-rebuild 各种子命令、回滚与世代管理、垃圾回收与 store 瘦身、磁盘空间排查、备份与恢复、日常巡检清单。
深入 Python 内存管理机制:引用计数、循环引用检测、分代垃圾回收、__slots__ 内存优化、对象池模式、内存泄漏排查工具(tracemalloc、objgraph),以及6个实用的性能调优技巧。
系统讲解 Go GC 的全流程,从三色标记算法、混合写屏障到并发回收的各个阶段,结合源码与性能调优实践
深入 Lua 的垃圾回收机制:增量标记清除算法的工作原理、collectgarbage 的完整 API、GC 参数调优方法,以及游戏开发中减少 GC 压力的实用技巧。