【发布时间】:2015-09-26 19:09:06
【问题描述】:
package main
import (
"fmt"
"net/http"
"runtime"
)
func handler(w http.ResponseWriter, r *http.Request) {
largeMemAlloc := make([]int, 100000000)
largeMemAlloc[1] = 100//lol
fmt.Fprintf(w, "hi from handler")
runtime.GC()
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":7777", nil)
}
一旦我访问http://127.0.0.1:7777 4-5 次使用的内存进入 GB。
大约 4-5 分钟后,内存仍未被操作系统占用。为什么会这样?
我做错了什么?
我在 go 1.5 中编译这个
编辑:10 分钟后,内存使用量降至 50mb。但是我不明白为什么回收这块内存需要这么长时间。我觉得我做错了什么。
【问题讨论】:
-
Go 不会立即将内存释放回操作系统——因为使用大块内存的程序通常会再次使用它们。只有在大约 7 - 10 分钟后才会释放未使用的内存 - 请参阅此处stackoverflow.com/questions/24376817/…
-
我明白了,非常感谢。
-
@elithrar 这是一个很好的解释!介意也为 Gen 的问题提供答案吗?
标签: go