go map slice 实现(内存泄漏分析)

本文阅读 2 分钟
首页 golang 正文

答案1:

slice内存泄漏分析

(1)发生场景:截取长slice中的一段导致长slice未释放

​ 由于底层都是数组,如果截图长slice的一段,其实相当于引用了底层数组中的一小段。只要还有引用,golang的gc就不能回收数组。这种情况导致未使用的数组空间,未及时回收。

​ 解决方案:新建一个长度为0的slice,将需要的一小段slice使用append方法添加到新的slice。再将原来的slice置为nil。

​ (2)发生场景:没有重置丢失的子切片元素中的指针

​ 没有及时将不再使用的slice置为nil

​ 解决方案:如果slice中包含很多元素,再只有一小部分元素需要使用的情况下。建议重新分配一个slice将需要保留的元素加入其中,将原来的长slice整个置为nil。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
如何限制 goroutine 并发数量 (channel 或 WaitGroup)
« 上一篇 09-17
分片键的选择?
下一篇 » 09-17

发表评论

发表评论