首页 > 其他分享 >golang的GC

golang的GC

时间:2022-11-20 21:37:37浏览次数:46  
标签:黑色 标记 对象 golang 屏障 GC

golang采用三色标记法进行垃圾清理

GC过程分为标记过程和清理过程

产生错误的情况:

  • 黑色对象引用白色对象
  • 灰色对象到白色对象的引用被破坏

破坏这两个条件之一就可以避免错误情况的出现

可能的解决方法: 整个过程STW,浪费资源,且对用户程序影响较大,由此引入了屏障机制

插入屏障解决的是第一种情况(黑色对象饮用白色对象),当黑色对象饮用白色对象时,将白色对象先变成灰色

删除屏障解决的是第二种情况,删除前,对指针所指对象进行着色

混合屏障:

大大缩短了 STW 时间

  • GC 开始将栈上的对象全部扫描并标记为黑色;
  • GC 期间,任何在栈上创建的新对象,均为黑色;
  • 被删除的堆对象标记为灰色;
  • 被添加的堆对象标记为灰色;

GC触发的机制:

  • 主动触发
  • 被动触发(百分比,定时)

百分比:将GC百分比设置为100意味着:基于在垃圾收集完成后标记为活动的堆内存量,下次垃圾收集前,堆内存使用可以增加100%

标签:黑色,标记,对象,golang,屏障,GC
From: https://www.cnblogs.com/JujunWang/p/16909589.html

相关文章

  • Golang实现hashmap
    golang实现hashmap思路:数组+链表->HashMap1.先看一下go里的map是怎么实现的go实现map采用拉链法的实现,如下图所示,键值对中的键会经过一个哈希函数,哈希函数会帮我们找到......
  • golang接收文件脚本
    golang接收文件脚本packagemainimport("io""os""fmt""io/ioutil""net/http")//https://www.jianshu.com/p/b49cc19d26f0参考资料......
  • 线程与GC
    托管线程在GC期间从是否可以访问托管堆上的对象来说有两种模式1.抢占模式,,不可以访问托管堆上的对象2.合作模式,,可以自由访问托管堆上的对象托管线程在GC期间会有两种模......
  • Ubuntu 16.04安装Brackets 1.7失败,缺失libgcrypt11,解决办法
    Ubuntu16.04安装Brackets1.7失败,缺失libgcrypt11,解决办法mingdu.zhengatgmaildotcom问题Ubuntu16.04安装Brackets1.7失败,提示缺失libgcrypt11。sudodpkg-iBracke......
  • AGC杂题乱写
    AGC001A.BBQEasy\(\rmsort\)一遍后累加单数位即可点击查看代码#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#def......
  • golang的编译过程
    编译过程:-----编译前端------词法分析与语法分析类型检查(别的语言中的语义分析,这时候有语法错误才会被找出来)-----编译后端------中间代码生成机器码生成我......
  • SpringCloud 核心组件Feign【远程调用&自定义配置】
    目录​​1,Feign远程调用​​​​1.1:Feign概述​​​​1.2:Feign替代RestTemplate​​​​    1):引入依赖​​​​    2):添加注解​​​​    3):编写Fei......
  • SpringCloud笔记(1)Eureka
     整体架构图:  1.服务注册与发现  RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以......
  • gcc 好玩的 builtin 函数
    gcc好玩的builtin函数前言在本篇文章当中主要想给大家介绍一些在gcc编译器当中给我们提供的一些好玩的内嵌函数(builtinfunction)......
  • Golang学习之路6-goroutine并发
    @目录前言一、goroutine用法二、goroutine循环三、goroutine提前退出四、goroutine双向管道五、goroutine单向管道六、监听管道如下图,可以看到当我们监听到有写入数据时会......