GC(垃圾回收)原理 1.5版本

问:这段代码执行后会输出什么?
这段代码在主goroutine中进行了十次go语句调用,也就是启用了十个goroutine(因为执行一条go语句时go的 runtime总是会优先从存放有空闲G的队列中获取一个G,没有空闲的情况下才会创建新的G,所以叫启用
goroutine更合适)来打印出i的值。
需要注意的是go函数真正被执行的时间一定总是滞后于所属的go语句被执行的时间的(因为GMP调度器需要按先进先出的顺序来执行G),而go语句本身执行完毕后如果不加干涉则不会等待其go函数的执行,会立刻去执行后面
的语句,所以for循环会很快的执行完,此时的那些go函数很可能还没有执行,此时i的值已经为10
另外当for语句执行完毕后主goroutine便结束了,则那些还未被执行的go函数将不会继续执行,即不会输出内容
所以对于以上代码,绝大多数情况下不会有任何输出,也可能会输出乱序的0到9或是10个10
GC(垃圾回收)原理 1.5版本
三色标记法
1、概念
(1)白色:代表最终需要清理的对象内存块(2)灰色:待处理的内存块
(3)黑色:活跃的内存块
2、流程
(1)起初将所有对象都置为白色
(2)扫描出所有的可达(可以搜寻到的)对象,也就是还在使用的,不需要清理的对象,标记为灰色,放入待处理队列
(3)从队列中提取灰色对象,将其引用对象标记为灰色放入队列,将自身标记为黑色
(4)有专有的锁监视对象内存修改
(5)在完成全部的扫描和标记工作之后,剩余的只有黑色和白色,分别代表活跃对象与回收对象
全站分卷索引 · 29 卷
- 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
- 2Go string 和 []byte 的区别
- 3数组和切片的区别
- 4扩容前后的Slice是一样的吗
- 5Go语言map是有序的还是无序的, 为什么
- 6go里面的map是并发安全的吗?如何并发安全
- 7Go 的错误处理和 Java 的异常处理对比
- 8介绍一下panic和recover
- 9什么是defer?有什么作用
- 10Go并发
- 11进程、线程的区别
- 12什么是go runtine
- 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
- 14什么是互斥锁(mutex)?在什么情况下会用到它们?
- 15Mutex有几种模式
- 16goroutine什么情况会发生内存泄漏?如何避免。
- 17Go语言中GC的流程是什么
- 18Go 中的内存逃逸现象是什么?
- 19CAP 理论,为什么不能同时满足
- 20说一下 Gin 的路由怎么实现的
- 21简述slice的底层原理,和数组的区别是什么
- 22defer底层原理
- 23侵入式和非侵入式的区别
- 24goroutine与线程的区别
- 25goroutine在什么情况下会被挂起呢?
- 26GC(垃圾回收)原理 1.5版本
- 27简述Go的垃圾回收机制
- 28协程优势及其通信方式
- 29Go的内存对齐