1、什么是GC惩猫?
2芝硬、為什么會有GC?
3轧房、GC的優(yōu)點(diǎn)拌阴?
4、GC的缺點(diǎn)奶镶?
5迟赃、Go中的GC歷史
6、Go中的GC實(shí)現(xiàn)原理(三色標(biāo)記)
7厂镇、Go怎么手動調(diào)用GC纤壁?
一、什么是GC捺信?
GC是Go語言中的內(nèi)存自動回收管理器(常稱為垃圾回收器)摄乒。業(yè)界常見的垃圾回收機(jī)制有引用計(jì)數(shù)、標(biāo)記-清除残黑、分代收集馍佑。
1)引用計(jì)數(shù):對每個(gè)對象維護(hù)一個(gè)引用計(jì)數(shù),當(dāng)引用該對象的對象被摧毀時(shí)梨水,引用計(jì)數(shù)減一拭荤,引用計(jì)數(shù)為零時(shí)回收該對象。
優(yōu)點(diǎn):對象可以很快被回收疫诽,不會出現(xiàn)內(nèi)存耗盡或者達(dá)到某個(gè)閥值時(shí)才回收舅世。
缺點(diǎn):不能很好的處理循環(huán)引用(http://www.reibang.com/p/0cfe42ed237c],而且實(shí)時(shí)維護(hù)引用計(jì)數(shù)奇徒,也有一定的代價(jià)雏亚。
代表語言:Python、Php摩钙、Swift
2)標(biāo)記-清除:從根變量開始遍歷所有引用的對象罢低,引用的對象標(biāo)記為“被引用”,沒有被標(biāo)記的進(jìn)行回收。
優(yōu)點(diǎn):解決了引用計(jì)數(shù)的缺點(diǎn)网持。
缺點(diǎn):需要STW宜岛,就是需要暫時(shí)停掉程序運(yùn)行。
代表語言:Golang(使用三色標(biāo)記法)
3)分代收集:按照對象生命周期長短劃分不同的代空間功舀,生命周期長的放入老年代萍倡,而短的放入新生代,不同代有不同的回收算法和回收頻率辟汰。
優(yōu)點(diǎn):回收性能好
缺點(diǎn):算法復(fù)雜
代表語言:JAVA
二列敲、為什么會有GC?
解決開發(fā)時(shí)的內(nèi)存管理的麻煩帖汞,以及避免內(nèi)存泄露的麻煩戴而。
三、GC的優(yōu)點(diǎn)涨冀?
不再需要自己寫代碼進(jìn)行垃圾回收填硕,避免內(nèi)存泄露的隱患。
四鹿鳖、GC的缺點(diǎn)扁眯?
占用性能,但是在這個(gè)性能過剩的時(shí)代翅帜,可以忽略不計(jì)了
五姻檀、Go中的GC歷史
https://blog.csdn.net/erlib/article/details/51850912
6、Go中的GC實(shí)現(xiàn)原理(三色標(biāo)記)
1)有哪三色涝滴?
灰色绣版、黑色、白色
2)三色代表什么意思歼疮?
白色:未搜索
灰色:正搜索
黑色:已搜索
3)三色標(biāo)記的工作原理杂抽?
起初所有對象都是白色的
掃描找出所有可達(dá)對象,標(biāo)記為灰色韩脏,放入待處理隊(duì)列
從隊(duì)列提取灰色對象缩麸,將其引用對象標(biāo)記為灰色放入隊(duì)列,自身標(biāo)記為黑色
寫屏障監(jiān)視對象內(nèi)存修改赡矢,重新標(biāo)色或放入隊(duì)列
7杭朱、Go怎么手動調(diào)用GC?
runtime.GC()