Go 服务里用 sync.Pool 缓存临时对象,为什么你的内存反而涨了?
在 Go 写高并发服务时,很多人会听说 sync.Pool 能减少 GC 压力:把频繁创建销毁的临时对象放进池子里复用,听起来很美好。但实际用起来经常出现诡异现象——压测时堆内存不降反升,甚至比不用池子还高;或者池子里的对象带着上一次请求的数据,引发难以排查的脏数据问题。这些问题通常来自对 sync.Pool 生命周期的误解:它并不保证对象一定被复用,GC 会清理池中对象,P 本地缓存和全局共享队列的分配策略也会影响命中率。另外,把带切片、map 或指针字段的结构体放进池子时,如果没...