Go笔记-垃圾回收集和SetFinalizer

【垃圾回收】

1- Go的开发者也不用写代码来释放程序中不再使用的变量和结构占用内存,Go中有独立的进程,垃圾回收器(GC),处理这些事情。它会搜索不再使用的变量然后释放它们。

2- 通过runtime包访问GC进程

3- 通过调用runtime.GC()函数显式的触发GC。使用场景为内存不足时,调用该函数,但是会对程序有短时的性能下降,因为GC进程在执行

4- 如果想知道当前的内存状态,可以使用

var m runtime.MemStates
runtime.ReadMemStats(&m)
fmt.Printf("%d Kb\n",m.Alloc/1024)

【SetFinalizer】

如果需要在一个对象object被从内存中移除前执行一些特殊操作,比如写日志等,可以通过调用以下方式调用函数来实现

runtime.SetFinalizer(obj, func(obj *typeObj))

在对象被GC进程选中并从内存中移除前,SetFinalizer都不会执行,即使程序正常结束或者发生错误

【学习参考处:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md