2
我发现奇怪占据堆时转换字节[]到字符串下面代码转换字节[],在golang串奇怪占据堆
package main
import (
"bytes"
"fmt"
"net/http"
_ "net/http/pprof"
"strings"
"time"
)
var (
c = make(chan int, 500000)
)
func main() {
go func() {
http.ListenAndServe(":8080", nil)
}()
f := func(ss []string) {
fmt.Println(ss)
time.Sleep(time.Millisecond)
<-c
}
for {
c <- 1
bs := bytes.NewBufferString("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z").Bytes()
fmt.Println(bs) // will raise memory leak after marked as comment???
s := string(bs)
ss := strings.Split(s, ",")
go f(ss)
}
}
而不
fmt.Println(bs)
将逐渐耗尽存储器。与
fmt.Println(bs)
工作正常。我无法理解发生了什么?我与version go1.9.2 darwin/amd64
有尝试添加fmt.Println(BS)?那会减少内存占用 – Nelson
我想知道 – Nelson
是的,当然。使用'fmt.Println(bs)'可以让GC(垃圾回收器)有更多的时间来收集内存,而使用'fmt.Println(bs)'的内存使用量为'25520KBytes'。 –