图解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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)[通俗易懂]

    Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)[通俗易懂]AnalogDisplay是简洁的显示控件,用于显示指定精确度和单位的模拟值(实数),可以将精确度设置为0,使显示结果为整数。第一步:建立MFC对话框第二步:插入AnalogDisplay控件第三步:单击控件-鼠标右键-添加成员变量完成添加变量的同时,控件的.h、.c文件也会被添加到程序中主要成员函数介绍://背景颜色I_analo

    2022年7月17日
    14
  • 从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版[通俗易懂]

    从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版[通俗易懂]本文3.0版本文章本文内容,和netcore2.0一样,不需要更新。更新很多小伙伴在用IIS发布的时候,总是会有一些问题,文章下边 #autoid-6-0-0 我也简单的

    2022年7月2日
    18
  • fork函数详解_全纯函数是什么

    fork函数详解_全纯函数是什么从最简单(基础)的一个例子说起,应该说是最基础而不是简单,下面的这个最基础的例子其实并不简单,因为有很多细节。我们需要从fork函数的定义开始说起:man手册官方定义thisfunctioncreatesanewprocess.Thereturnvalueisthezerointhechildandtheprocess-idnumberofthechildintheparent,or-1uponerror.这个函数创建一个新的进程。在子进

    2025年7月4日
    2
  • 关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现

    关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现程序有3个控件BindingNavigator:就是DataGridView控件上面的那个,在工程里名字:bindngrDemoDataGridView:dgvDemoBindingSource:这个其实可以不要bindseDemo 示例采用的是SQLSERVER的示例数据库pub在pub数据库里写入分页存储过程CREATEPROCEDURE[db…

    2022年7月12日
    24
  • Winform基础控件美化

    Winform基础控件美化这段时间重写了Winform的TextBox,ComboBox,NumericUpDown,DateTimePicker(还在实现中),Panel,Button控件主要实现了,这些控件的垂直居中,可自定义边框颜色等功能,支持fontawesome图标.效果见下图项目目录见下图Common是公共方法Control为继承类控件包括Button,Panel,(DateTime…

    2022年5月10日
    44
  • keil更改黑色背景颜色「建议收藏」

    keil更改黑色背景颜色「建议收藏」1、先将keil安装目录下UV4中global文件复制出来留作备用,然后用记事本打开安装目录下的global文件2、将下面的内容全部替换global里的内容,然后保存。#propertiesforallfiletypesindent.automatic=1virtual.space=0view.whitespace=0view.endofline=0code….

    2022年6月21日
    513

发表回复

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

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