👨‍💻go中常见的内存泄露场景

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary
 

什么是内存泄漏

程序运行中,动态分配的内存未能正确释放或回收,导致内存一直被占用不能被正确释放,可能导致最终内存耗尽
  • 系统资源耗尽:严重的内存泄漏可能会导致系统内存耗尽,进而引发系统崩溃或其他程序无法正常运行。
  • 程序崩溃:如果程序无法分配到足够的内存,它可能会崩溃,尤其是在没有进行异常处理的情况下。
 

常见场景

协程被永久阻塞

 

context未及时取消

 

不正确的资源管理

 

没有停止不再使用的time.Ticker

 

子切片造成的暂时性内存泄漏

可以使用copy,使得s0和s1不共用内存
 

子字符串(复制操作)造成的暂时性内存泄漏

可以使用一下方式防止内存泄漏
  • 使用strings.Builder
  • 使用stings.Clone()函数
 

未重置丢失的切片元素中的指针

 
 

循环引用

 

总结

尽管 Go 的垃圾回收机制可以自动管理内存,但仍需要注意编写代码时避免上述场景,以防止内存泄漏影响程序性能和稳定性。
 

ref

 
Prev
sync/atomic包
Next
常用限流组件及其实现
Loading...
Article List