OOP 的核心在於抽象資料型別、繼承、多型,但物件如何建立、資料儲存位置、生命週期誰控制同樣關鍵。C++ 與 Java 採取截然不同的策略。
delete 釋放,易造成記憶體洩漏。new 建立;GC 定期掃描堆積區,找出「不可達」物件並回收其記憶體。這消除了 C++ 常見的記憶體洩漏問題,也避免了「釋放後仍使用」的懸空指標錯誤。
| 策略 | 銷毀時機 | 優點 | 缺點 |
|---|---|---|---|
| 堆疊/靜態 (C++) | 離開作用域/程式結束 | 確定性、效率高 | 缺乏彈性、需預知 |
| 手動 delete (C++ 堆積) | 程式設計師決定 | 完全控制 | 易出錯、記憶體洩漏 |
| GC (Java) | 不可達時自動回收 | 安全、簡單、無洩漏 | 非確定性、有效能開銷 |
Java 設計目標是降低程式設計師負擔,犧牲極致效率換取開發效率與健壯性。現代 JVM 的 JIT 編譯、逃逸分析等優化,已大幅縮小堆積區配置與 GC 的效能差距。
Java 統一採用「堆積區配置 + 自動垃圾回收」模型,雖引入執行期開銷,但極大簡化了記憶體管理,讓開發者專注於業務邏輯。這是 Java 「提高開發效率」哲學的核心體現之一。