千家信息网

Go中内存释放的改进是怎样的

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要为大家分析了Go中内存释放的改进是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习"Go中内存释放的改
千家信息网最后更新 2026年10月31日Go中内存释放的改进是怎样的

这篇文章主要为大家分析了Go中内存释放的改进是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习"Go中内存释放的改进是怎样的"的知识吧。

一直以来 go 的 runtime 在释放内存返回到内核时,在 Linux 上使用的是 MADV_DONTNEED,虽然效率比较低,但是会让 RSS(resident set size 常驻内存集)数量下降得很快。不过在 go 1.12 里专门针对这个做了优化,runtime 在释放内存时,使用了更加高效的 MADV_FREE 而不是之前的 MADV_DONTNEED。

这样带来的好处是,一次 GC 后的内存分配延迟得以改善,runtime 也会更加积极地将释放的内存归还给操作系统,以应对大块内存分配无法重用已存在的堆空间的问题。不过也会带来一个副作用:RSS 不会立刻下降,而是要等到系统有内存压力了,才会延迟下降。需要注意的是, MADV_FREE 需要 4.5 以及以上内核,否则 runtime 会继续使用原先的 MADV_DONTNEED 方式。

比如,我最近就遇到了这个问题:

几台服务的请求量差别并不大,可以明显看到 25(4.14 内核,其他几台都是 3.10 内核)的内存释放看起来很慢,但是 HEAP 占用显示却正常:

顺便说下,4.1 以上内核,最为引人注目的特性就是 eBPF,通过一个内核内置的字节码虚拟机,可以完成数据包过滤、调用栈跟踪、耗时统计、热点分析等等高级功能,是 Linux 系统的性能分析利器。

当然 go 1.12 为了避免像这样一些靠判断 RSS 大小的自动化测试因此出问题,也提供了一个 GODEBUG=madvdontneed=1 参数可以强制 runtime 继续使用 MADV_DONTNEED:runtime: provide way to disable MADV_FREE。但是显然正常情况下,我们都应该优先使用 MADV_FREE。

go适合做什么

go是golang的简称,而golang可以做服务器端开发,且golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于web应用、API应用等领域。

关于"Go中内存释放的改进是怎样的"就介绍到这了,更多相关内容可以搜索以前的文章,希望能够帮助大家答疑解惑,请多多支持网站!

内存 内核 数据 系统 问题 分析 应用 内容 知识 跟着 分配 处理 延迟 服务 明显 引人注目 操作系统 不大 兴趣 利器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 互联网科技工作委员会主任 互联网科技巨头监管 互联网科技深圳 广州互联网科技公司 科技与互联网发展 为想互联网科技 苏州互联网科技贷款公司 互联网科技的未来发展 互联网科技论坛 开启互联网科技时代小说 小米互联网科技园设置 成都互联网科技公司工作好不好 深圳艾果互联网通讯科技 江苏苏星互联网科技有限公司 西安左小互联网科技有限公司 同城互联网络科技 数字科技和互联网金融哪个好 互联网高科技绘画 山东亿川互联网科技有限责任公司 互联网是不是新科技 菲比寻常互联网科技 中国的互联网科技企业的崛起 互联网科技教育视频 互联网科技公司有风险吗 国大互联网教育科技有限公司工作 燊美集互联网科技有限公司 互联网领先科技宣传片 卡尔迅互联网科技有限公司 北京天晋互联网科技有限公司
0