【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

相关推荐
代龙涛1 分钟前
WordPress 主题初体验:从 style.css 到 index.php、single.php 简单实战
后端·php·wordpress
zzb15806 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
必胜刻8 小时前
RESTful 基础:资源、路径与方法对应关系详解
后端·restful
XPoet8 小时前
AI 编程工程化:Hook——AI 每次操作前后的自动检查站
前端·后端·ai编程
J2虾虾8 小时前
在SpringBoot中使用Druid
java·spring boot·后端·druid
程序员小假9 小时前
为什么要有 time _wait 状态,服务端这个状态过多是什么原因?
java·后端
qwert10379 小时前
跨域问题解释及前后端解决方案(SpringBoot)
spring boot·后端·okhttp
90后的晨仔10 小时前
OpenClaw Windows 完整安装指南
后端
IT_陈寒11 小时前
Vue组件复用率提升300%?这5个高阶技巧让你的代码焕然一新!
前端·人工智能·后端
beata12 小时前
Spring Boot基础-2:Spring Boot 3.x 起步依赖(Starter)深度拆解:为什么引入一个依赖就够了?
spring boot·后端