# hybrid GC發想
---
## 核心想法:
1. "盡量"不將資料寫回原zone
2. 盡量將資料寫在附近確保資料連續性不被破壞
3. 經過數輪GC後資料還在附近而不是被推遠
4. 選擇victim zone時同時考慮invalid chunk數量和附近有沒有可用的zone
---
## 架構
- 先檢查前後/後的鄰近zone

----
- 先往前找還是往後找?
- 將zone進行分成奇數zone和偶數zone
- 奇數zone先往後找、偶數zone先往前找
- 資料會傾向於兩個zone裡面循環

----
- 可能的問題
1. 如果附近的neighbor都沒有空間:
- 回到self-packing GC strategy(更新在同一個zone)
- 完全不管距離直接寫到其他可用的zone:
- 如果完全沒其他zone可用的話?
2. 多遠的zone算neighbor?
3. 順向的寫入可能造成前面的zone完全沒有附近可用的空間
----

----

----
- 如何選擇victim zone
- 如果只考慮invalid chunk可能選到附近完全沒有可用空間的zone
- 同時考慮invalid chunk和附近可用空間數量
- 選擇方式(選最大的)
- 附近可用空間數量 - valid_chunk
- 可能可以用線段樹?
{"metaMigratedAt":"2023-06-17T18:28:50.463Z","metaMigratedFrom":"YAML","title":"hybrid GC發想","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"convex\",\"backgroundTransition\":\"fade\"}","contributors":"[{\"id\":\"1f7caa22-882c-4815-a334-c06b0eca2ade\",\"add\":1271,\"del\":319}]"}