golang GC 问题分析遇到的问题?
写了一个程序,用于调试GOGC的情况:
package main
import (
“fmt”
_ “net/http/pprof”
“runtime”
“time”
)
var gcnum int
func MakeSpace() {
makeSpace := make([]int, 4024);
makeSpace = append(makeSpace, 1000)
gcnum++
if (gcnum % 100 == 0) {
fmt.Println(“—————gc flesh”)
runtime.GC()
}
}
func main() {
//makeSpace := make([]int, 1024);
t := time.NewTicker(time.Second*1)
for v := range t.C {
fmt.Println(“time:”, v)
go MakeSpace()
}
fmt.Println(“end”)
time.Sleep(time.Second*10)
}
运行命令:
GOGC=off GODEBUG=gotrace=1 go run gogctest.go
问题1:使用了GOGC=off命令,则说明不进行GC自动回收,在程序中进行垃圾回收,但是当执行到runtime.GC()时,发现内存不再增长,但是内存并没有减少
问题2:使用命令GODEBUG=gotrace=1 ,再执行到runtime.GC()时,为什么没有打印具体到回收信息
问题3:将GOGC=off改为GOGC=100,发现内存增长一半甚至更多的时候,没有内存减少的迹象,并且内存还在一直增长。但是当执行到runtime.GC()时,发现内存减少。为什么?
推荐你使用这个工具去发送代码
PrivateBin
这样代码会清晰很多