package main import ( "fmt" "runtime" ) var retained [][]byte // 全局变量,用来保持对象可达 func printMemory(stage string) { var m runtime.MemStats runtime.ReadMemStats(&m) fmt.Printf("%s: HeapAlloc=%d MiB, TotalAlloc=%d MiB\n", stage, m.HeapAlloc/1024/1024, m.TotalAlloc/1024/1024) } func main() { runtime.GC() printMemory("开始") for i := 0; i < 20; i++ { block := make([]byte, 1024*1024) // 每次创建约 1 MiB 的底层数组 block[0] = byte(i) retained = append(retained, block) } printMemory("分配后") retained = nil // 程序不再持有这些数组 runtime.GC() printMemory("GC 后") }