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()时,发现内存减少。为什么?

讨论数量: 1

推荐你使用这个工具去发送代码

PrivateBin

这样代码会清晰很多

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!