图解Golang的GC算法「建议收藏」

图解Golang的GC算法「建议收藏」虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。以下是GolangGC算法的里程碑:v1.1STWv1.3MarkSTW,Sweep并行v1.5三色标记法v1.8hybridwritebarrier经典的GC算法有三种:引用计数(referencecounting)、标记-清扫(mar…

大家好,又见面了,我是你们的朋友全栈君。

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。

以下是Golang GC算法的里程碑:

  • v1.1 STW
  • v1.3 Mark STW, Sweep 并行
  • v1.5 三色标记法
  • v1.8 hybrid write barrier

经典的GC算法有三种:引用计数(reference counting)、标记-清扫(mark & sweep)、复制收集(Copy and Collection)。

Golang的GC算法主要是基于标记-清扫(mark and sweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复制收集(copy and collection)可自行百度。

标记-清扫(Mark And Sweep)算法

此算法主要有两个主要的步骤:

  • 标记(Mark phase)
  • 清除(Sweep phase)

第一步,找出可达的对象,然后做上标记。
第二步,回收未标记的对象。

操作非常简单,但是有一点需要额外注意:mark and sweep算法在执行的时候,需要程序暂停!即stop the world。
也就是说,这段时间程序会卡在哪儿。故中文翻译成卡顿。

我们来看一下图解:

开始标记

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151093.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 按键精灵2014微信群内给好友轮流发私信[通俗易懂]

    按键精灵2014微信群内给好友轮流发私信[通俗易懂]给微信群内好友轮流发私信1,界面如图2,程序中要找的图片为3,程序源码如下:/** *此版本适合windows版微信,电脑的分辨率需要调到1366*768 */x=387//第一行第一列的横坐标y=94//第一行第一列的纵坐标h=Form1.InputBox1.Text //每页的行数,超过一页的一律填5行page=For

    2022年6月4日
  • Java设计模式之迭代子模式

    本文继续介绍23种设计模式系列之观察者模式。定义在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式。迭代子(Iterator)模式又叫游标

    2022年3月11日
  • Timer时间控件

    Timer时间控件第一步、创建一个Windows窗体,第二步、创建样式,在工具箱中找到TextBox和Labell、Button、timer。第三步、改变属性的Name和Text(就是改写名称)第四步、排版按钮1:使用的控制器是Label;name改为lblTime2:使用的控制器是TextBox;Name改为txtTime3:使用的控制器是Button;Name改为btnGet4…

    2022年5月23日
  • windows route add添加静态路由_centos route add

    windows route add添加静态路由_centos route addWindowsrouteaddcommandfailed出现此错误需要管理员安装openvpn和管理员运行vpngui

    2022年8月11日
  • method什么意思_method的值有哪些

    method什么意思_method的值有哪些这个报错只有IDEA会有问题,在eclipse并不会出现这个问题。有哪位前辈可以帮我指点迷津吗?publicclassServletDemo02extendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicvoiddoPost(HttpServletRequestrequest,HttpServl…

    2022年9月23日
  • 漫画什么是分布式事务_分布式事务框架

    漫画什么是分布式事务_分布式事务框架点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!————— 第二天 —————————————————假如没有分布式事务在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订

    2022年10月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号