Golang 如何避免内存泄露
Golang 中,如果 goroutine 持有某些资源(如内存、文件描述符等)
但在其生命周期结束时未正确释放这些资源,则可能会发生内存泄漏。
这通常是由于 goroutine 在退出时未能正确关闭通道或释放锁而引起的。
1. 使用 defer 语句来确保在函数返回之前释放资源
2. 避免在 goroutine 中使用全局变量,因为它们可能会在 goroutine 退出时未被正确释放。
3. 当使用通道时,请确保在不再需要它们时关闭它们。
4. 当使用锁时,请确保在不再需要它们时解锁它们。
在 Golang 中内存泄露分为暂时性内存泄露和永久性内存泄露。
获取长 slice 中的一段导致长 slice 未释放
string 相比切片少了一个容量的 cap 字段,可以把 string 当成一个只读的切片类型。
获取长 string 或者切片中的一段内容,由于新生成的对象和老的 string 或者切片共用一个内存空间,会导致老的 string 和切片资源暂时得不到释放,造成短暂的内存泄漏
THE END