【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

相关推荐
陈随易20 分钟前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
鱼樱前端1 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
犀利豆1 小时前
Claude code tools 研究系列-开篇(AskUserQuestion)
后端
颜酱4 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
IT_陈寒5 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
iOS开发上架哦6 小时前
Android代码混淆与iOS加固技术详解
后端·ios
Alan_6917 小时前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
Conan在掘金7 小时前
ArkTS 进阶之道(3):为哈禁解构声明?类型一眼可见 vs 推断链断裂
后端
ttwuai7 小时前
AI 生成后台改数据后,操作日志别只记按钮:Go + MySQL 怎么验
数据库·人工智能·mysql·golang
晚安code7 小时前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式