34 lines
645 B
Go
34 lines
645 B
Go
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 后")
|
|
} |