Go语言什么时候会触发GC?Go开发培训
老男孩IT教育
常见问题
2021年11月19日 14:38
GO作为一门较新的编程语言,在早期经常被开发人员反应垃圾回收(即GC)机制中STW的时间过长,因此就诞生了一个问题,GO语言中什么时候才会触发GC机制呢?如果你也不太清楚,请看下文:
GO作为一门较新的编程语言,在早期经常被开发人员反应垃圾回收(即GC)机制中STW的时间过长,因此就诞生了一个问题,GO语言中什么时候才会触发GC机制呢?如果你也不太清楚,请看下文:
首先问题来了,什么是GC机制?
在计算机科学中,GC机制是一种自动管理内存的机制,垃圾回收器会去尝试回收程序不再使用的对象及其所占用的内存。
那为什么需要GC呢?
因为手动管理内存比较麻烦,如果管理出错或管漏内存也会更麻烦,将会直接导致程序不稳定,也就是持续泄露,甚至直接崩溃。
GC的触发场景:
1、系统触发:运行时自行根据内置的条件,只要检查和发现到,就会进行GC处理,维护整个应用程序的可用性;
2、手动触发:开发者在业务代码中自行调用runtime.GC方法来触发GC行为。
系统触发:
在此场景中,GO源码的文件中,明确标识了GC系统触发的三种场景,分别如下:
gcTriggerHeap:当所分配的堆大小达到阈值(由控制器计算的触发堆的大小)时,将会触发;
gcTriggerTime:当距离上一个GC周期的时间超过一定时间时,将会触发;
gcTriggerCycle:如果没有开启GC,则启动GC;
手动触发:
在此场景下,GO语言中仅有runtime.GC方法可以触发,一般在什么业务场景中,要涉及到手动干涉GC,强制触发它呢?
需要手动强制触发的场景极其少见,可能会是在某些业务方法执行完后,因其占用了过多内存,需要人为释放,又或者是debug程序所需。
关于"Go语言什么时候会触发GC?"的话题到这里就结束了,如果还想了解更多关于Go语言的技术知识,推荐选择老男孩教育,欢迎大家周六来现场试听,试听就送内部教材一本。
推荐阅读: