golang程序内存分析
在程序中跟踪打印垃圾回收信息
将golang打包为linux的执行程序后(打包后名称为test),运行时加上GODEBUG=‘gctrace=1’(GODEBUG=‘gctrace=1’ ./test),即可以在日志中打印出每次垃圾回收的信息,如图:
数据格式,如第一行:4->5->2 MB, 5MB goal 表示的意义是: GC开始,结束,以及当前活跃堆内存的大小,单位M。goal表示此时golang全局堆内存大小。此处表示golang程序已经把5-2=3MB的内存标记为非活跃内存,但是golang程序并没有将该内存释放给操作系统,所以golang程序占用的内存仍然是5MB。
golang程序用完就归还内存给操作系统
debug.FreeOSMemory(),通过top命令可以查看到,golang程序申请了大内存后,如果使用该语句,则top中该程序占用的内存会直接归还给操作系统。