😥 整理不易,此资源只针对正式星主开放,
还请入驻星球后再来观看。

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
  • Go真实面试题汇总系列

    • 《内存管理篇》
  • 宝典内容

    • 24. go垃圾回收,什么时候触发
    • 40. go的GC(标记清理 -> 三色标记发 -> 混合写屏障)
    • 43. Golang 逃逸分析
    • 57. 内存模型
    • 128. GC 触发机制是什么样的
    • 163. Go 语言什么时候垃圾回收,写代码的时候如何减少对象分配
    • 164. golang GC
    • 182. 一个对象数组,不用delete[] 使用delete有什么影响
    • 183. go 内存分配,和 tcmalloc 的区别?
    • 191. Golang 内存分配的实现?
    • 192. Golang 里怎么避免内存逃逸?
    • 212. 了解过Go的内存管理吗
    • 252. 垃圾回收 相比程序员直接 free 和 delete 之类的,有什么优化(内存碎片)
    • 257. Golang和Java的垃圾回收机制
    • 315.GO的垃圾回收?Java的垃圾回收?Python的垃圾回收
    • 325. go 内存分配
    • 334. golang的gc流程,会stw吗,三色不变和混合写屏障
    • 338. Go 语言内存分配,什么分配在堆上,什么分配在栈上
    • 339. 简单介绍一下go的内存分配机制?有mcentral为啥要mcache?
    • 354. go的GC和Python的GC
    • 369. 简单介绍一下go的内存分配机制?有mcentral为啥要mcache?
    • 370. go性能调优怎么做的?
    • 399. go中的指针强转
    • 441. go语言的时候垃圾回收,写代码的时候如何减少小对象分配
    • 456. 虚拟内存有什么作用 (无效,属于操作系统)

😥 整理不易,此资源只针对正式星主开放,
还请入驻星球后再来观看。

183. go 内存分配,和 tcmalloc 的区别?


企业题库解析小组

题目序号:(2707、2372...)

题目来源:shopee、小米

频次:9

# 答案:peace

go 内存分配核心思想就是把内存分为多级管理,从而降低锁的粒度。它将可用的堆内存采用二级分配的方式进行管理:每个线程都会自行维护一个独立的内存池,进行内存分配时优先从该内存池中分配,当内存池不足时才会向全局内存池申请,以避免不同线程对全局内存池的频繁竞争。

  • Go在程序启动时,会向操作系统申请一大块内存,之后自行管理。
  • Go内存管理的基本单元是mspan,它由若干个页组成,每种mspan可以分配特定大小的object。
  • mcache, mcentral, mheap是Go内存管理的三大组件,层层递进。mcache管理线程在本地缓存的mspan;mcentral管理全局的mspan供所有线程使用;mheap管理Go的所有动态分配内存。
  • 极小的对象(<=16B)会分配在一个object中,以节省资源,使用tiny分配器分配内存;一般对象(16B-32KB)通过mspan分配内存;大对象(>32KB)则直接由mheap分配内存。

tcmalloc tcmalloc 是google开发的内存分配算法库,最开始它是作为google的一个性能工具库 perftools 的一部分。TCMalloc是用来替代传统的malloc内存分配函数。它有减少内存碎片,适用于多核,更好的并行性支持等特性。 TC就是Thread Cache两英文的简写。它提供了很多优化,如: 1.TCMalloc用固定大小的page(页)来执行内存获取、分配等操作。这个特性跟Linux物理内存页的划分是不是有同样的道理。 2.TCMalloc用固定大小的对象,比如8KB,16KB 等用于特定大小对象的内存分配,这对于内存获取或释放等操作都带来了简化的作用。 3.TCMalloc还利用缓存常用对象来提高获取内存的速度。 4.TCMalloc还可以基于每个线程或者每个CPU来设置缓存大小,这是默认设置。 5.TCMalloc基于每个线程独立设置缓存分配策略,减少了多线程之间锁的竞争。

Go中的内存分类并不像TCMalloc那样分成小、中、大对象,但是它的小对象里又细分了一个Tiny对象,Tiny对象指大小在1Byte到16Byte之间并且不包含指针的对象。小对象和大对象只用大小划定,无其他区分。 Go内存管理与tcmalloc最大的不同在于,它提供了逃逸分析和垃圾回收机制。(逃逸分析见168等、垃圾回收见618等)

  • 答案:peace