Go Slice 导致的内存泄漏:小切片如何拖垮大内存?
为什么一个只剩几个元素的 slice 能让几百 MB 内存迟迟不降?从 GC 的可达性原理出发,拆解「大底层数组被小切片绑架」与「残留指针未清零」两类内存泄漏,并给出 slices.Clone 深拷贝、clear 置零与 slices.Delete 的解法。
01 / APPROACH
从界面信息层级、服务端数据契约,到缓存、部署与可观测性,我倾向于把产品体验和工程质量视为同一个问题。
02 / LATEST WRITING
记录真实项目中的架构取舍、实现细节与问题复盘。
为什么一个只剩几个元素的 slice 能让几百 MB 内存迟迟不降?从 GC 的可达性原理出发,拆解「大底层数组被小切片绑架」与「残留指针未清零」两类内存泄漏,并给出 slices.Clone 深拷贝、clear 置零与 slices.Delete 的解法。
从 SliceHeader 结构体出发,讲清 Go slice 的 len 与 cap 边界、append 的扩容与原地改写行为,以及共享底层数组引发的两类经典暗坑,并给出复制与完整切片表达式两种隔离方案。
03 / SELECTED WORK