为了账号安全,请及时绑定邮箱和手机立即绑定

进行内存消耗管理

进行内存消耗管理

Go
慕无忌1623718 2021-05-10 12:08:26
我是Go的新手,它试图弄清楚它如何管理内存消耗。我的一个测试项目中的内存出现问题。我不明白为什么当我的程序长时间运行时,Go使用越来越多的内存(从不释放它)。我正在运行下面提供的测试用例。第一次分配后,程序将使用近350 MB的内存(根据ActivityMonitor)。然后,我尝试释放它,ActivityMonitor显示内存消耗增加了一倍。为什么?我正在使用Go 1.0.3在OS X上运行此代码。此代码有什么问题?在Go程序中管理大变量的正确方法是什么?在实现使用大量时间和内存的算法时,我还遇到了另一个与内存管理相关的问题。运行一段时间后,将引发“内存不足”异常。package mainimport ("fmt" "time")func main() {  fmt.Println("getting memory")  tmp := make([]uint32, 100000000)  for kk, _ := range tmp {    tmp[kk] = 0  }  time.Sleep(5 * time.Second)  fmt.Println("returning memory")  tmp = make([]uint32, 1)  tmp = nil  time.Sleep(5 * time.Second)  fmt.Println("getting memory")  tmp = make([]uint32, 100000000)  for kk, _ := range tmp {    tmp[kk] = 0  }  time.Sleep(5 * time.Second)  fmt.Println("returning memory")  tmp = make([]uint32, 1)  tmp = nil  time.Sleep(5 * time.Second)    return}
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

要最终(强制)收集未使用的内存,您必须致电runtime.GC()

variable = nil 可能会使事物无法到达并因此有资格被收集,但它本身并没有释放任何东西。


查看完整回答
反对 回复 2021-05-31
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信