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

网站服务器网络农家乐网站模板

网站服务器网络,农家乐网站模板,智慧团建重置密码验证码,网站 扩展Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同,只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了,含义是相同的,只是名字有…

Go堆内存管理

1. Go内存模型层级结构

img

Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同,只是一些规则和流程存在差异。

2. Go内存管理的基本概念

Go内存管理的许多概念在TCMalloc中已经有了,含义是相同的,只是名字有一些变化。

2.1 Page

与TCMalloc中的Page相同,x64架构下1个Page的大小是8KB。Page表示Golang内存管理与虚拟内存交互内存的最小单元。操作系统虚拟内存对于Golang来说,依然是划分成等分的N个Page组成的一块大内存公共池。

2.2 mspan

与TCMalloc中的Span一致。mspan概念依然延续TCMalloc中的Span概念,在Golang中将Span的名称改为mspan,1个mspan为多个Page(go中为8KB的内存大小)。1个mspan对应1个或多个大小相同的object,mspan主要用于分配对象的区块,下图简单说明了Span的内部结构。

img

mspan结构体如下:


type mspan struct {next *mspan     // 在mspan链表中,指向后一个mspanprev *mspan     // 在mspan链表中,指向前一个mspanlist *mSpanList // 供debug使用startAddr uintptr // mspan起始地址npages    uintptr // 当前mspan对应的page数manualFreeList gclinkptr // mSpanManual状态mspan中的可用对象链表// freeindex是slot索引,标记下一次分配对象时应该开始搜索的地址, 分配后freeindex会增加// 每一次分配都从freeindex开始扫描allocBits,直到它遇到一个表示空闲对象的0// 在freeindex之前的元素都是已分配的, 在freeindex之后的元素有可能已分配, 也有可能未分配freeindex uintptrnelems uintptr // 当前span中object数量.// allocCache是从freeindex位置开始的allocBits缓存allocCache uint64// allocBits用于标记哪些元素是已分配的, 哪些元素是未分配的。// 使用freeindex + allocBits可以在分配时跳过已分配的元素, 把对象设置在未分配的元素中.allocBits  *gcBits// 用于在gc时标记哪些对象存活, 每次gc以后allocBits都会与gcmarkBits保持一致gcmarkBits *gcBits// 清理代数,每GC1次sweepgen会+2// sweepgen=currrent sweepgen - 2:该span需要被清扫// sweepgen=currrent sweepgen - 1:该span正在被清扫// sweepgen=currrent sweepgen:该span已被清扫,带使用// sweepgen=currrent sweepgen + 1:该span在清扫开始前,仍然被缓存,需要被清扫// sweepgen=currrent sweepgen + 3:该span已被清扫,仍然被缓存sweepgen    uint32divMul      uint32        // for divide by elemsizeallocCount  uint16        // 已分配对象的数量spanclass   spanClassstate       mSpanStateBoxneedzero    uint8         // 在分配前需要清零elemsize    uintptr       // 对象大小limit       uintptr       // span数据末尾speciallock mutex         // specials链表的锁specials    *special      // 根据object偏移量排序的special链表.}

mspan的allocBits是一个bitmap,用于标记哪些元素是已分配的, 哪些元素是未分配的。通过使用allocBits已经可以达到O(1)的分配速度,但是go为了极限性能,对其做了一个缓存allocCache,allocCache是从freeindex开始的allocBits缓存。

2.3 Size Class

Golang内存管理针对衡量内存的概念又更加详细了很多,这里面介绍一些基础的有关内存大小的名词及算法。

  1. Object Class是指协程应用逻辑一次向Go内存申请的对象Object大小。Object是Golang内存管理模块针对内存管理更加细化的内存管理单元。一个Span在初始化时会被分成多个Object。

    比如Object Size是8B(8字节)大小的Object,所属的Span大小是8KB(8192字节),那么这个Span就会被平均分割成1024(8192/8=1024)个Object。

    逻辑层从Golang内存模型取内存,实则是分配一个Object出去。为了更好的让读者理解,这里假设了几个数据来标识Object Size 和Span的关系
    加载更多


文章转载自:

http://l08ywIzM.tpkxs.cn
http://3ZJaAgUr.tpkxs.cn
http://x8Xhej1K.tpkxs.cn
http://apvqS8aT.tpkxs.cn
http://AcI14bYK.tpkxs.cn
http://G5lYUuVF.tpkxs.cn
http://TOGmn1vP.tpkxs.cn
http://DypsHJp0.tpkxs.cn
http://FS2llbf9.tpkxs.cn
http://8hgLikfl.tpkxs.cn
http://kSnD4TaN.tpkxs.cn
http://lKO8aLle.tpkxs.cn
http://1pUNRvmm.tpkxs.cn
http://uPmxcSPz.tpkxs.cn
http://s66GT8ki.tpkxs.cn
http://Dyts8Bzw.tpkxs.cn
http://joebsWja.tpkxs.cn
http://gKwo60hr.tpkxs.cn
http://nQxndluZ.tpkxs.cn
http://SxWcsVgf.tpkxs.cn
http://lbIdDrsF.tpkxs.cn
http://WXKNey5k.tpkxs.cn
http://EJE3yhNy.tpkxs.cn
http://UNOkAWkC.tpkxs.cn
http://8t5Rbj3q.tpkxs.cn
http://RIzBmgzv.tpkxs.cn
http://BxSc0eJt.tpkxs.cn
http://n2G1fmh2.tpkxs.cn
http://mmHSlNAz.tpkxs.cn
http://Nwy8qGF0.tpkxs.cn
http://www.dtcms.com/wzjs/736563.html

相关文章:

  • 国美的网站做的怎么样苏州市郭巷建设局网站
  • 吴江seo网站优化软件北京网站制作17页
  • 网页制作与网站建设宝典扫描版pdf岳阳网站建设
  • seo网站建设 刘贺稳营销专家aseo搜索优化培训
  • 注册商标设计对网站进行优化
  • 专业公司网站开发服务福建手机版建站系统开发
  • 天津网站建站模板网页制作模板中文
  • 企业建网站的案例深圳福田香格里拉大酒店
  • 怎么打开google网站wordpress多站点403
  • shopify建站费用qq可以上网
  • 自己怎么开网站备案如何做家居网站
  • 岚山区建设局网站动画视频制作
  • 如何做内网网站江西景德镇建设厅网站
  • 佛山网站建设制作公司研发了一个app以后怎么盈利
  • 肇庆市手机网站建设品牌建个平台需要多少资金
  • 新乡建设网站做外贸的网站有哪几个
  • 做网站帮外国人淘宝WordPress怎么安装不了
  • 为企业做一个网站多少钱兰州网站制作公司哪个好
  • 长春火车站到吉大二院本科 网站建设的基础教程
  • 德阳吧网站建设西安旅游网站开发
  • js与asp.net做的网站专门做吃播的网站
  • 如何用dw做网站地图自己怎么做网站视频赚钱
  • 沈阳专业的网站设计公司到哪里建网站
  • 洛杉矶网站建设金华模板建站定制网站
  • 常州建设局官方网站服务器租用泰海
  • 免费提供空间的网站软件下载网站哪个最安全
  • 免费微信网站制作平台seo推广优化公司哪家好
  • 济南品牌网站建设价格低如何免费创建一个自己的网站
  • 雨花区区网站建设公司室内设计整套方案图
  • 一起爱又一个wordpress站点大连做网站价格