猿问

进行内存消耗管理

我是Go的新手,它试图弄清楚它如何管理内存消耗。

我的一个测试项目中的内存出现问题。我不明白为什么当我的程序长时间运行时,Go使用越来越多的内存(从不释放它)。

我正在运行下面提供的测试用例。第一次分配后,程序将使用近350 MB的内存(根据ActivityMonitor)。然后,我尝试释放它,ActivityMonitor显示内存消耗增加了一倍。为什么?

我正在使用Go 1.0.3在OS X上运行此代码。

此代码有什么问题?在Go程序中管理大变量的正确方法是什么?

在实现使用大量时间和内存的算法时,我还遇到了另一个与内存管理相关的问题。运行一段时间后,将引发“内存不足”异常。

package main


import ("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

}


慕无忌1623718
浏览 234回答 2
2回答

暮色呼如

要最终(强制)收集未使用的内存,您必须致电runtime.GC()。variable = nil 可能会使事物无法到达并因此有资格被收集,但它本身并没有释放任何东西。
随时随地看视频慕课网APP

相关分类

Go
我要回答