切片的性能优化
- 删除元素时,把空余位置置空,有助于垃圾回收
情况1:很小一部分不再使用(少见) 如 Go 语言高性能编程-Delete(GC)中给出了一段示例代码:
maxLen := len(a)
if i < maxLen - 1{
copy(a[i:], a[i+1:]) // i+1到结尾的元素统一往前移动一格
}
a[maxLen-1] = nil // or the zero value of T
a = a[:maxLen-1] // 最后一格切掉
实际项目中,因为数组的删除时间复杂度是 O(n) ,如果遇到要频繁删除的场景,更好的解决方案是更换数据结构,比如 双向链表 list.List
,所以这个场景以了解为主。
情况2:长时间只使用切片数组中很小的片段 那么建议新建独立切片,复制需要的数据,使得原数组内存能被及时回收,降低内存占用。
- 一次性分配足够的内存,避免动态扩容:老生常谈,不在赘述