package main import ( "fmt" "runtime" "time" ) // printGCStats 打印GC核心统计信息 func printGCStats() { var stats runtime.MemStats runtime.ReadMemStats(&stats) fmt.Println("===== GC 统计信息 =====") fmt.Printf("当前堆分配内存: %d MB\n", stats.Alloc/1024/1024) // 等价于HeapAlloc fmt.Printf("存活使用堆内存: %d MB\n", stats.HeapInuse/1024/1024) // 真正的存活内存 fmt.Printf("空闲待回收内存: %d MB\n", stats.HeapIdle/1024/1024) // 垃圾内存 fmt.Printf("累计 STW 时长: %.3f ms\n", float64(stats.PauseTotalNs)/1e6) fmt.Printf("GC 总次数: %d\n", stats.NumGC) fmt.Printf("最近一次 STW 时长: %.3f μs\n", float64(stats.PauseNs[(stats.NumGC+255)%256])/1e3) fmt.Printf("下一次GC触发阈值: %d MB\n", stats.NextGC/1024/1024) // 下次GC的内存阈值 fmt.Println("=======================\n") } func main() { // 后台定时打印GC状态 go func() { for { printGCStats() time.Sleep(3 * time.Second) } }() // 模拟高频内存分配,触发GC data := make([][]byte, 0) for i := 0; i < 100; i++ { data = append(data, make([]byte, 10*1024*1024)) // 每次分配10MB time.Sleep(200 * time.Millisecond) } // 阻塞程序退出 select {} }