当前位置: 首页 > news >正文

九浅一深Jemalloc5.3.0 -- ⑨浅*gc

目前市面上有不少分析Jemalloc老版本的博文,但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析Jemalloc5.3.0的实现。

另外,单讲实现代码是极其枯燥的,我将尽量每个原理知识点都用一个简简单单的小程序引出来,这样便于大家测试和上手调试。另外,还会用GDB打印数据结构,方便理解当时的状态。

今天我们讲gc,  有两种gc: tcache gc, extent gc. 为免篇幅过长,只讲tcache gc.

tcache gc是一种事件,其它事件还包括:

是事件就有触发条件 和 触发后的动作,其代码都在thread_event.c中, 先看触发条件:

 对每一个事件都走一遍上面这段代码,其中 对于tcache gc只有分配内存的size的和超过了opt_tcache_gc_incr_bytes(默认65536,用户可以设置)才会置is_tcache_gc_triggered为true,从而激活“动作”:

tcache gc 的动作为函数tcache_gc_event_handler, 每次触发只会处理一个tcache.bin, 至于是第几个bin由下面的代码决定:

//tcache.cszind_t szind = tcache_slow->next_gc_bin;
...
tcache_slow->next_gc_bin++;if (tcache_slow->next_gc_bin == nhbins) {tcache_slow->next_gc_bin = 0;}

第一次触发第i个bin时只会设置tcache.bin[i].low_bits_low_water为tcache.bin[i].stack_head, 下一次触发这个bin时:flush掉low_bits_low_water与low_bits_empty之间的3/4(高地址,stack底部),如下代码

相关文章:

  • 如何在Laravel中实现数据验证:确保数据准确性的最佳实践
  • 【Vue报错】v-bind动态绑定src无效
  • NLP+LLM从入门到精通系列
  • 阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?
  • 【ssh】permission denied, please try again.
  • 【Go语言入门学习笔记】Part7.闭包和defer关键字
  • 从华为和特斯拉之争,看智能驾驶的未来
  • Java 线程池之 ScheduledThreadPool
  • 如何在Perl中进行条件判断:掌握Perl条件语句的艺术
  • 稳定性四—NE流程及分析方法
  • HandlerMethodArgumentResolver :深入spring mvc参数解析机制
  • JAVA:文件防重设计指南
  • 商用全面提速,5G新通话进入普及阶段!
  • Matplotlib 文本
  • Spring学习03-[Spring容器核心技术IOC学习进阶]
  • 78. Subsets
  • CentOS从零开始部署Nodejs项目
  • flask接收请求并推入栈
  • httpie使用详解
  • Java|序列化异常StreamCorruptedException的解决方法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • mac修复ab及siege安装
  • MD5加密原理解析及OC版原理实现
  • Netty源码解析1-Buffer
  • Selenium实战教程系列(二)---元素定位
  • TypeScript实现数据结构(一)栈,队列,链表
  • 从零开始在ubuntu上搭建node开发环境
  • 缓存与缓冲
  • 通过git安装npm私有模块
  • 问题之ssh中Host key verification failed的解决
  • 移动端 h5开发相关内容总结(三)
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 我们雇佣了一只大猴子...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #if #elif #endif
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (1)Android开发优化---------UI优化
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4)STL算法之比较
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (java)关于Thread的挂起和恢复
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .aanva
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .bat批处理出现中文乱码的情况
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitignore文件---让git自动忽略指定文件