Go GC

作者: ljh123 | 来源:发表于2019-07-18 16:55 被阅读5次

    1、什么是GC?
    2、为什么会有GC?
    3、GC的优点?
    4、GC的缺点?
    5、Go中的GC历史
    6、Go中的GC实现原理(三色标记)
    7、Go怎么手动调用GC?

    一、什么是GC?
    GC是Go语言中的内存自动回收管理器(常称为垃圾回收器)。业界常见的垃圾回收机制有引用计数、标记-清除、分代收集。
    1)引用计数:对每个对象维护一个引用计数,当引用该对象的对象被摧毁时,引用计数减一,引用计数为零时回收该对象。
    优点:对象可以很快被回收,不会出现内存耗尽或者达到某个阀值时才回收。
    缺点:不能很好的处理循环引用(https://www.jianshu.com/p/0cfe42ed237c],而且实时维护引用计数,也有一定的代价。
    代表语言:Python、Php、Swift
    2)标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记为“被引用”,没有被标记的进行回收。
    优点:解决了引用计数的缺点。
    缺点:需要STW,就是需要暂时停掉程序运行。
    代表语言:Golang(使用三色标记法)
    3)分代收集:按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,而短的放入新生代,不同代有不同的回收算法和回收频率。
    优点:回收性能好
    缺点:算法复杂
    代表语言:JAVA

    二、为什么会有GC?
    解决开发时的内存管理的麻烦,以及避免内存泄露的麻烦。

    三、GC的优点?
    不再需要自己写代码进行垃圾回收,避免内存泄露的隐患。

    四、GC的缺点?
    占用性能,但是在这个性能过剩的时代,可以忽略不计了

    五、Go中的GC历史
    https://blog.csdn.net/erlib/article/details/51850912

    6、Go中的GC实现原理(三色标记)
    1)有哪三色?
    灰色、黑色、白色
    2)三色代表什么意思?
    白色:未搜索
    灰色:正搜索
    黑色:已搜索
    3)三色标记的工作原理?
    起初所有对象都是白色的
    扫描找出所有可达对象,标记为灰色,放入待处理队列
    从队列提取灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色
    写屏障监视对象内存修改,重新标色或放入队列

    7、Go怎么手动调用GC?
    runtime.GC()

    相关文章

      网友评论

        本文标题:Go GC

        本文链接:https://www.haomeiwen.com/subject/drallctx.html