hybrid write barrier 為什麼能消除 stack rescanning?
這兩天看了一下 eliminate stack rescanning 那個 proposal,感覺很困惑。
stack rescanning 的初衷是因為 write barrier 太重,所以棧上變數的讀寫是不會加 write barrier 的,所以自然需要在 mark termination STW 時重掃一遍棧。但是現在,棧上變數讀寫仍然不加 hybrid write barrier,那麼與 mark 併發的棧上變數的修改還是無法被 GC 觀測到。考慮一下例子:
a 和 b 均為棧上變數,型別為指標,c 為堆上記憶體。
a = c mark start, a 和 b 作為根物件入隊 a = nil a 出隊,被染黑 b 出隊,被染黑 b = c mark termination
至此,c 還是白的,會被回收。
我想了一下,hybrid write barrier 有效的前提是,逃逸分析百分百可靠,堆上記憶體一定會有一個堆上的引用,這樣在堆上引用被移動到棧上時 deletion barrier 就會發揮作用。問題在於現在 Go 的逃逸分析並不是百分百準確的。所以我很困惑。
ref:
https://golang.org/src/cmd/compile/internal/ssa/writebarrier.go#L16 的 needwb 函式中展示了在何時新增 barrier,顯然棧上讀寫是不加 barrier 的。
那個 proposal: https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 《Learning ELK Stack》5 為什麼需要ElasticsearchElasticsearch
- Python能幹什麼?為什麼會火?Python
- Twitter能為你做什麼?
- Python能幹什麼?為什麼會這麼火?Python
- 什麼是 SAP Support Package StackPackage
- 為什麼Docker能迅速躥紅Docker
- JavaScript 為什麼能活到現在?JavaScript
- Python為什麼能擴充套件Python套件
- Barrier
- 機器為什麼能夠學習?
- 索引為什麼能提供查詢效能...索引
- Visual Studio Code為什麼能這麼牛X?
- 什麼是 SAP UI5 的 Hybrid Web ContainersUIWebAI
- MXNet: Barrier
- 虛擬偶像能為遊戲做什麼?遊戲
- 雙絞線為什麼能抵消干擾
- 為什麼要學習Python?因為能「為所欲為」啊……Python
- python中Write和Writelines有什麼不同?如何使用?Python
- 索引的作用、為什麼能提高檢索速度?索引
- BigDecimal為什麼能保證精度不丟失?Decimal
- 為什麼SSB與PRACH occasion能夠關聯?
- nginx 是什麼,能幹什麼?Nginx
- 乾貨分享,小程式代理為什麼能賺錢?
- DFSS能為天津企業解決什麼問題?
- 《微博營銷》——微博能為你做什麼
- AI,能為1.2億聽障老人做點什麼AI
- 致同:同理心能為企業帶來什麼?
- 專案成本管理軟體能為你做什麼?
- web assembly是什麼,能幹什麼Web
- 1 什麼是Zookeeper 能幹什麼
- 為什麼精益生產能讓企業轉危為安?
- 02-dispatch_barrier
- Python能幹什麼?Python
- Java能幹什麼?Java
- 為什麼 bindService 能和 Activity 的生命週期聯動?
- GitOps實踐指南:GitOps能為我們帶來什麼?Git
- 自繪引擎時代,為什麼Flutter能突出重圍?Flutter
- 任天堂能為2020年準備什麼隱藏大招?