如果想知道当前的内存状态,可以使用:
// fmt.Printf("%d\n", runtime.MemStats.Alloc/1024)
// 此处代码在 Go 1.5.1下不再有效,更正为
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("%d Kb\n", m.Alloc / 1024)
如果需要在一个对象 obj 被从内存移除前执行一些特殊操作,比如写到日志文件中,可以通过如下方式调用函数来实现:
runtime.SetFinalizer(obj, func(obj *typeObj))
func(obj *typeObj)
需要一个 typeObj
类型的指针参数 obj
,特殊操作会在它上面执行。func
也可以是一个匿名函数。
在对象被 GC 进程选中并从内存中移除以前,SetFinalizer
都不会执行,即使程序正常结束或者发生错误。