搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
人工智能uu
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
自然语言处理:文本分析与处理技术
2
西门子初了解和snap7编程
3
linux内核分析之进程地址空间
4
Win11搭建Mysql保姆级教程_win11 安装mysql
5
Web前端最新六种微服务架构的设计模式,移动web开发_前端微服务架构
6
PostgreSQL自带的命令行工具05- dropuser_postgresql 删除用户
7
vs 生成get set_C# 9 新功能“源代码生成器”,你用了吗?
8
项目实战——答题卡识别判卷代码个人学习笔记
9
开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(三)_whisper模式
10
ChatGLM-6B使用、微调、训练_chatgpt-6b训练
当前位置:
article
> 正文
golang 垃圾回收
作者:人工智能uu | 2024-07-05 13:02:07
赞
踩
golang 垃圾回收
gc不回收什么
GC 不负责回收栈中的内存
栈是一块专用内存,专门为了函数执行而准备的,存储着函数中的局部变量以及调用栈
栈中的数据可以通过简单的编译器指令自动清理,也就不需要通过 GC 来回收了
垃圾回收算法
主流的两类垃圾回收算法有两种,分别是追踪式垃圾回收算法[1]和引用计数法( Reference counting )。而三色标记法是属于追踪式垃圾回收算法的一种
追踪式算法的核心思想是判断一个对象是否可达,因为一旦这个对象不可达就可以立刻被 GC 回收了
第一步找出所有的全局变量和当前函数栈里的变量,标记为可达。第二步,从已经标记的数据开始,进一步标记它们可访问的变量,以此类推,专业术语叫传递闭包。
三色标记法
对象用三种颜色表示,黑白灰。
初始化都是白色的,然后把全局变量和栈上的变量变成灰的
第二步把灰色的对象变成黑色,把原先灰色对象指向的变量变成灰色,以此类推,当发现没有对象可以被制成灰色时,白色的对象就可以清理了
垃圾回收流程
阶段一,marking setup 标记准备,在三色标记前,需要开启 write barrier 写屏障。运行过程中程序的函数栈中会有新分配的对象,就需要写屏障。写屏障主要是修改原先的写逻辑,在对象生成的时候给他着为灰色,因此打开写屏障会保证三色标记法在并发下安全运行
打开写屏障需要停止所有的goroutine,也就是stop the world (STW)
阶段二,marking标记。打开write barrier以后,开始用三色标记法标记。
在标记开始的时候,收集器会默认抢占 25% 的 CPU 性能,剩下的75%会分配给程序执行。但是一旦收集器认为来不及进行标记任务了,就会改变这个 25% 的性能分配。这个时候收集器会抢占程序额外的 CPU,这部分被抢占 goroutine 有个名字叫 Mark Assist 标记辅助。而且因为抢占 CPU的目的主要是 GC 来不及标记新增的内存,那么抢占正在分配内存的 goroutine 效果会更加好,所以分配内存速度越快的 goroutine 就会被抢占越多的资源。
阶段三,Mark termination 标记结束
marking标记阶段结束后进入标记结束阶段,会关掉写屏障,开始stw,还需要计算下次清理的目标和计划,比如使用了mark assist 标记辅助,会促使下次gc提前
第四个阶段 sweeping concurrent 清理阶段,并发执行,无感知也没有延迟
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/人工智能uu/article/detail/790202
推荐阅读
article
golang
排序
_
算法
手撕-
八大
排序
Go
版本(上)...
前言
八大
排序
包含:冒泡
排序
、选择
排序
、插入
排序
、快速
排序
(快排)、归并
排序
、基数
排序
、希尔
排序
、堆
排序
。本文主要讲述前5...
赞
踩
article
Golang
调整
视频
fps
和
分辨率
|
Golang
工具_怎么
代码
提高上传
视频
的清晰度和
分辨率
...
本文提供将
视频
修改
fps
和
分辨率
的工具方法,一如既往的实用主义。主要也是学习一下golang使用ffmpeg工具的方式。...
赞
踩
article
Golang
|
Leetcode
Golang
题
解之第
199
题
二叉树
的右视图...
Golang
|
Leetcode
Golang
题
解之第
199
题
二叉树
的右视图
Golang
|
Leetcode
Gol...
赞
踩
article
Golang
(9):
Xubuntu
系统
,
使用
Golang
,
开发直播流媒体
服务器
live
go
,
并...
目录前言1
,
关于
Golang
直播 live
go
2
,
使用
OBS
3
,
总结前言相关
Golang
全部分类:https://...
赞
踩
article
linux
脚本
启动
go
程序
,
Golang
启动
外部
程序
和
可执行文件
...
启动
外部命令和
程序
os 包有一个 StartProcess 函数可以调用或
启动
外部系统命令和二进制
可执行文件
;它的第一个...
赞
踩
article
linux
装
go
环境
脚本,
go
lang Linux
环境
搭建...
1、查看
linux
系统版本uname -aimage.png3、下载与系统匹配的安装包wget https://stor...
赞
踩
article
探索
Go
与
Web
的无缝融合:
golang
-
wasm
-
example
项目深度解析与推荐...
探索
Go
与
Web
的无缝融合:
golang
-
wasm
-
example
项目深度解析与推荐项目地址:https://gitco...
赞
踩
article
【
LangChain
系列】第一节:文档
加载
_
documentloader
json
golang
l...
LangChain
提供了一套强大的文档
加载
器,简化了从PDF、网站、YouTube视频和专有数据库(如Notion)等不...
赞
踩
article
Golang
|
Leetcode
Golang
题
解之第
212
题
单词
搜索II...
Golang
|
Leetcode
Golang
题
解之第
212
题
单词
搜索II
Golang
|
Leetcode
Gola...
赞
踩
article
golang
如何
接收
控制台
的
数据
并计算
输入
的
两个
的
和...
通过 fmt.Scanln() 来获取同一行
的
数据
,使用空格来分别不同
的
数据
参考案例:package mainimpor...
赞
踩
article
100天精通
Golang
(基础入门篇)——第7天:深入
学习
键盘输入
和
打印输出
,掌握
常用
函数和包_
go
...
本文将详细介绍
打印输出
和
键盘输入
的相关内容。首先,我们将深入研究fmt包,探讨其在
打印输出
中的作用和
常用
函数。接着,我们...
赞
踩
article
golang
web
服务
搭建
学习和优雅的停止
服务
...
这里分享一下
golang
web
服务
搭建
过程,仅分享安装
搭建
过程中的配置,相关工具的安装请自行下载安装:项目打包使用了(...
赞
踩
相关标签
golang 排序
冒泡排序和选择排序区别
选择排序和冒泡排序的区别
golang
音视频
ffmpeg
开发语言
Golang
Leetcode
题解
rtmp
livgo
obs
linux 脚本启动go程序
linux装go环境脚本
langchain
语言模型
人工智能
学习
数据库
python
大数据
java
go