【Go】常见的四个内存泄漏问题

Goroutine没有顺利结束

1、这里更多的是由于channel+for+select导致的,错误的写法导致了发送者或接收者没有发现channel已经关闭,任务已经结束了,却仍然在尝试输入输出https://geektutu.com/post/hpg-exit-goroutine.html

Map的remove方法不会真正的删除某个key,内存会无限增长

不要把map用作全局

timer的错误用法

go 复制代码
//错误用法
for{
	select {
		//这里timer会生成一个新变量,在timer到期之前会一直占用内存
		case <-time.After(duration):
			fmt.Println("process request with", duration)
			}
	}
go 复制代码
//正确用法
idleDelay := time.NewTimer(idleDuration)
defer idleDelay.Stop()
for{
	idleDelay.Reset(idleDuration)
	select {
		case <-idleDelay.C:
			fmt.Println("process request with", duration)
			}
	}

闭包,某个局部变量的指针被外部所引用,导致不能被GC

相关推荐
蜗牛互联网6 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
Zhou1411367 小时前
SpringBoot_02_自动配置原理
java·spring boot·后端
子兮曰8 小时前
Node.js 50个优势场景盘点:一个人单干,为啥我多数时候只用它
前端·后端
IT_陈寒8 小时前
我花3小时debug,就因为JavaScript这个隐式转换坑
前端·人工智能·后端
程序猿阿越8 小时前
containerd如何拉取镜像
后端·kubernetes·源码阅读
一条小小yu8 小时前
为什么使用springboot
java·spring boot·后端
香瓜子rd8 小时前
MySQL InnoDB 并发控制核心原理:事务、隔离级别、MVCC 与锁机制
数据库·后端
RISCV_Explorer9 小时前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v
对象存储与RustFS9 小时前
升级 RustFS 二进制不停机:一条一条换,留一条退路
后端·rust·开源
hasty9 小时前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang