美文网首页
GO语言垃圾回收机制

GO语言垃圾回收机制

作者: 烧书煮石_ | 来源:发表于2019-12-02 21:51 被阅读0次

常见的垃圾回收方法:

  • 引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,引用计数减1,当引用计数器为0是回收该对象。
    优点:对象可以很快的被回收,不会出现内存耗尽或达到某个阀值时才回收。
    缺点:不能很好的处理循环引用,而且实时维护引用计数,有也一定的代价。
    代表语言:Python、PHP

  • 标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记为"被引用",没有被标记的进行回收。
    优点:解决了引用计数的缺点。
    缺点:需要STW,即要暂时停掉程序运行。
    代表语言:Golang(其采用三色标记法)

  • 分代收集:按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,而短的放入新生代,不同代有不能的回收算法和回收频率。
    优点:回收性能好
    缺点:实现复杂
    代表语言: JAVA

root

首先标记root根对象,根对象的子对象也是存活的。

根对象包括:全局变量,各个stack上的变量等。

三色标记

灰色:对象已被标记,但这个对象包含的子对象未标记
黑色:对象已被标记,且这个对象包含的子对象也已标记
白色:对象未被标记

GC步骤

  1. 初始状态下所有对象都是白色的。
  2. 首先标记root对象为灰色,放入待处理队列。
  3. 取出待处理队列的灰色对象,将其引用标记为灰色,放入待处理队列,并将本身标记为黑色.
  4. 循环第三步,直到待处理队列为空(在标记过程中的新的引用对象,通过写屏障直接标记为灰色),此时剩下的只有白色和黑色,白色对象则表示不可达,将其清理.

触发GC的机制

  1. 在申请内存的时候,检查当前当前已分配的内存是否大于上次GC后的内存的2倍(可配置GOGC参数,即百分比,默认是100,所以为两倍),若是则触发.(如第一次是内存占用10m触发GC,第二次会是20m,第三次40m....[或许有误])

  2. 监控线程发现上次GC的时间已经超过两分钟了,触发

  3. 手动:runtime.gc()

相关文章

  • 现代的垃圾回收机制(Go 垃圾回收机制概述)

    现代的垃圾回收机制(Go 垃圾回收机制概述) 关于 Go GC策略的见解 细节你可以到 Hacker News 和...

  • Go语言——垃圾回收GC

    Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 Getting ...

  • Java垃圾回收详解

    深入理解 Java 垃圾回收机制 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个...

  • GO语言垃圾回收机制

    常见的垃圾回收方法: 引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,引用计数减1,当引用计数器...

  • Go语言简介

    一、什么是Go语言? Go是一门开源、并发支持、具有垃圾回收机制、编译性系统编程语言,在静态编译语言的高性能和...

  • Go垃圾回收机制

    上一篇分析了Go的内存分配机制,本文将简单分析一下Go的垃圾回收机制。本文是《循序渐进go语言》第五篇,本文也是刚...

  • 浅谈Golang垃圾回收

    众所周知,Go 是一门自带垃圾回收的语言,那么 Go 的 GC 是怎么实现的,和其他的自带垃圾回收的语言又有什么区...

  • 垃圾回收机制

    垃圾回收机制     垃圾回收机制(Garbage Collection:GC)基本是所有高级语言的标准配置之一了...

  • [c++11]智能指针学习笔记

    C#、Java、python和go等语言中都有垃圾自动回收机制,在对象失去引用的时候自动回收,而且基本上没有指针的...

  • java 垃圾回收机制

    垃圾回收机制是java语言的特性之一,java 是C++语言之后 诞生的语言,垃圾回收机制就相当于解决了C++语言...

网友评论

      本文标题:GO语言垃圾回收机制

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