golang垃圾回收机制了解吗?

本文阅读 3 分钟
首页 golang 正文

题目序号:618 同40题

题目来源

频次:高频

答案1:(重拾)

垃圾回收就是对程序中不再使用的内存资源进行自动回收的操作。

三色标记法

  • 初始化状态下所有对象都是白色的。
  • 从根节点开始遍历所有对象,把遍历到的对象变成灰色对象
  • 遍历灰色对象,将灰色对象引用的对象也变成灰色对象,然后将遍历过的灰色对象变成黑色对象
  • 循环步骤3,知道灰色对象全部变黑色。
  • 通过写屏障检测对象有变化。重复以上操作
  • 收集所有的白色对象(垃圾)

题目序号:639

题目来源:学而思

频次:1

答案1:(重拾)

1.切片是基于数组实现的,它的底层是数组,所以它的底层的内存是连续分配的。切片对象非常小,是因为它是只有3个字段的数据结构:

  • 指向底层数组的指针
  • 切片的长度
  • 切片的容量

Go中切片的扩容首选判断 如果旧切片的长度小于1024,则最终容量就是旧容量的两倍,否则,最终容量是从旧容量开始循环增加到原来的1/4.

情况一:如果原数组还有容量可以扩容,扩容后的数组还是指向原来的数组。

情况二:原来数组的容量已经达到了最大值,再想扩容,Go默认会先开一片内存区域,把原来的值拷贝过来,然后在执行append()操作,这种情况丝毫不影响原数组。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论