Golang gc(垃圾回收)机制

本文介绍了GC(垃圾回收)的基础知识,包括GC的重要性、常见的GC算法,如引用计数、标记-清除、节点复制和分代收集。重点讨论了Golang的垃圾回收策略,当堆上分配的对象超过32K时,系统会检查是否需要进行GC,并在活跃对象超过预设阈值(默认4M)时触发。GC主要流程包括从根节点开始标记、遍历灰色对象队列并清扫。整个过程有助于防止内存泄露和系统崩溃。
摘要由CSDN通过智能技术生成

1.什么是GC
    程序创建对象等引用类型实体会在虚拟内存中分配给他们一块内存空间,如果该内存空间不再被任何引用变量引用是就变成了需要被回收的垃圾。对于一个运行时间比较长的程序,如果产生的内存垃圾没有及时被回收,就会造成内存泄露甚至系统崩溃等问题。

2.常见的GC算法

  1. 引用计数
  2. 标记-清除
  3. 节点复制
  4. 分代手机

3.golang的gc算法

     3.1 何时触发gc

         在堆上分配大于 32K byte 对象的时候进行检测此时是否满足垃圾回收条件,如果满足则进行垃圾回收。

     3.2 触发gc的条件

        当前堆上的活跃对象大于我们初始化时候设置的 GC 触发阈值(默认4M)

     3.3 垃圾回收的主要流程

  1. 所有对象最开始都是白色
  2. 从ROOT根节点开始便利所有可到达的对象,标记会灰色,放入待处理队列。
  3. 遍历所有灰色对象队列,将其引用对象标记为灰色放入待处理队列,自身标记为黑色。
  4. 处理完灰色对象队列,执行清扫工作。

  4.过程流程图解析

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值