我是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
}
暮色呼如
相关分类