关于golang map内存回收

请看下面代码:

package main

import (
    "net/http"
)

type Spyte []byte

func newSpyte() Spyte {
    var bytes []byte
    for i := 0; i < 16; i++ {
        bytes = append(bytes, '0')
    }
    return Spyte(bytes)
}

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        var num = 1000000
        var dataMap = map[int]Spyte{}
        for i := 0; i < num ; i++ {
            dataMap[i] = newSpyte()
        }
        w.Write([]byte("finished"))
    })
    http.ListenAndServe(":8080", nil)
}

编译运行go build -o test.exe && test.exe之后查看内存使用情况发现map分配的内存并没有被回收:

有什么方法能够解决第20行map内存回收问题?

共 1 个回复


1851616111

你这个程序是的意思是生成一个很长的byte数组,生成完毕后再写入response。
如果不想太浪费内存,应该是边生成边写入。

# 0