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
- 商業週刊:為什麼那麼多人沉迷於消除遊戲?遊戲
- Twitter能為你做什麼?
- Python能幹什麼?為什麼會火?Python
- 我為什麼看好Hybrid - 獻給Web前端工程師Web前端工程師
- Python能幹什麼?為什麼會這麼火?Python
- JavaScript 為什麼能活到現在?JavaScript
- 為什麼Docker能迅速躥紅Docker
- 我能為開源做些什麼?
- 什麼是 SAP Support Package StackPackage
- 機器為什麼能夠學習?
- 虛擬偶像能為遊戲做什麼?遊戲
- Python為什麼能擴充套件Python套件
- 索引為什麼能提供查詢效能...索引
- Barrier
- JAVA語言為什麼能跨平臺?Java
- 雙絞線為什麼能抵消干擾
- 為什麼要學習Python?因為能「為所欲為」啊……Python
- Visual Studio Code為什麼能這麼牛X?
- 為什麼 APM 能提升 IT 團隊工作質量?
- 人工智慧到底能為醫療做什麼人工智慧
- 蘋果iPhone為什麼能夠做到“低配高能”?蘋果iPhone
- iPadPro為什麼沒能拯救iPad?iPad
- 為什麼JVM能夠擊敗Node.js?JVMNode.js
- 為什麼無密碼認證能夠有效密碼
- nginx 是什麼,能幹什麼?Nginx
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- web assembly是什麼,能幹什麼Web
- 自繪引擎時代,為什麼Flutter能突出重圍?Flutter
- 乾貨分享,小程式代理為什麼能賺錢?
- 豐田的準時化(JIT)為什麼能賺錢?
- AI,能為1.2億聽障老人做點什麼AI
- DFSS能為天津企業解決什麼問題?
- 專案成本管理軟體能為你做什麼?
- 解析大資料能為媒體帶來什麼?大資料
- Java Web Start為什麼能載入pack.gzJavaWeb
- BigDecimal為什麼能保證精度不丟失?Decimal
- Java能幹什麼?Java