Я новичок в Go и пытаюсь понять, как он управляет потреблением памяти.
У меня есть проблемы с памятью в одном из моих тестовых проектов. Я не понимаю, почему Go использует все больше и больше памяти (никогда не освобождая ее), когда моя программа работает в течение длительного времени.
Я запускаю тестовый пример, приведенный ниже. После первого выделения программа использует около 350 МБ памяти (в соответствии с ActivityMonitor). Затем я пытаюсь освободить его, а ActivityMonitor показывает, что потребление памяти удваивается. Почему?
Я запускаю этот код в OS X, используя Go 1.0.3.
Что не так с этим кодом? И каков правильный способ управления большими переменными в программах 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
}