後端語言 中階
記憶體管理與垃圾回收(GC)的核心概念是什麼?
記憶體管理與垃圾回收
記憶體區域
- Stack(堆疊):函數呼叫堆疊、區域變數,自動分配/釋放,速度快
- Heap(堆積):動態分配(物件、陣列),需 GC 管理
垃圾回收演算法
Mark and Sweep(標記清除)
- 從根物件(root)出發,標記所有可達物件
- 清除未被標記的物件 ❌ 可能造成記憶體碎片化
Reference Counting(引用計數)
維護物件被引用次數,歸零即回收 ✅ 即時回收 ❌ 循環引用無法回收(Python 有額外 cycle detector)
Generational GC(分代回收)
根據物件存活時間分代(Young / Old / Permanent)
- 大多數物件短命,優先掃描 Young Generation
- JVM(Java)、V8(Node.js)均使用此機制
Stop-the-World(STW)
GC 執行時暫停所有應用執行緒,是延遲的主要來源
- 現代 GC(如 ZGC、G1 GC)努力最小化 STW 暫停時間
語言比較
| 語言 | GC 機制 |
|---|---|
| Java | Generational GC(G1/ZGC) |
| Go | Concurrent Mark-Sweep |
| Python | Reference Counting + Cycle Detector |
| Rust | 無 GC,Ownership 系統編譯時管理 |
面試加分:理解 Memory Leak 的常見成因——未釋放的事件監聽器、全域快取無上限成長、循環引用。
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
