Go Slice 导致的内存泄漏:小切片如何拖垮大内存?
为什么一个只剩几个元素的 slice 能让几百 MB 内存迟迟不降?从 GC 的可达性原理出发,拆解「大底层数组被小切片绑架」与「残留指针未清零」两类内存泄漏,并给出 slices.Clone 深拷贝、clear 置零与 slices.Delete 的解法。
Finance background · Building software since 2021
I am a self-taught developer with a background in finance and audit, focused on frontend experience, Go backends and end-to-end delivery. This site documents real design decisions, implementation details and lessons learned.
01 / APPROACH
From interface hierarchy and server data contracts to caching, deployment and observability, I treat product experience and engineering quality as the same problem.
02 / LATEST WRITING
Notes on architecture, implementation details and lessons learned while building real products.
为什么一个只剩几个元素的 slice 能让几百 MB 内存迟迟不降?从 GC 的可达性原理出发,拆解「大底层数组被小切片绑架」与「残留指针未清零」两类内存泄漏,并给出 slices.Clone 深拷贝、clear 置零与 slices.Delete 的解法。
从 SliceHeader 结构体出发,讲清 Go slice 的 len 与 cap 边界、append 的扩容与原地改写行为,以及共享底层数组引发的两类经典暗坑,并给出复制与完整切片表达式两种隔离方案。
03 / SELECTED WORK