go map slice 实现(内存泄漏分析)
参考解析
题目来源:知乎
答案1:
slice内存泄漏分析
(1)发生场景:截取长slice中的一段导致长slice未释放
由于底层都是数组,如果截图长slice的一段,其实相当于引用了底层数组中的一小段。只要还有引用,golang的gc就不能回收数组。这种情况导致未使用的数组空间,未及时回收。
解决方案:新建一个长度为0的slice,将需要的一小段slice使用append方法添加到新的slice。再将原来的slice置为nil。
(2)发生场景:没有重置丢失的子切片元素中的指针
没有及时将不再使用的slice置为nil
解决方案:如果slice中包含很多元素,再只有一小部分元素需要使用的情况下。建议重新分配一个slice将需要保留的元素加入其中,将原来的长slice整个置为nil。