Java 設計目標明確:物件導向、跨平台、網絡支援、安全執行、易用性。本文深度剖析四大核心支柱特性的實現機制、優勢與權衡,並對比 C++/C# 同類機制,提供進階理解視角。
private/protected/public) 隱藏實現細節。extends),子類復用父類邏輯。abstract 類與 interface 定義契約。.java → 編譯器 javac → **位元碼 .class** (平台中立指令集)。
圖:Java 程式在所有系統下透過 JVM 運行
javac, jdb, jar...)。開發端必裝。-server 模式:激進優化,適合長運行服務。new/delete,易忘記釋放 → 記憶體洩漏;重複釋放 → 崩潰。std::shared_ptr/unique_ptr) 輔助。finalize() 機制已過時 (Java 9 Deprecated),不保證及時執行,不建議依賴。資源釋放請用 try-with-resources / AutoCloseable。| 年代/代際 | 代表算法 | 特點 |
|---|---|---|
| 早期 | Serial/Parallel Scavenge | 停頓長,適合單核/批次 |
| CMS (Concurrent Mark Sweep) | 並發標記清除 | 低停頓,但碎片整理難,Java 14 移除 |
| G1 (Garbage First) | 分區並發壓縮 | Java 9 預設,可預測停頓,大堆友好 |
| ZGC / Shenandoah | 超低延遲並發 | 亞毫秒停頓,TB 級堆 (Java 11/12+) |
| Generational ZGC | 分代版 ZGC | Java 21 生產就緒,兼顧吞吐與延遲 |
廠商差異:IBM (OpenJ9 Gencon)、Azul (C4/G1C)、Oracle (G1/ZGC) 各有專屬調優策略,IBM 早期論文證實 GC 分配速度可超越手動 malloc/free (TLAB 機制)。
remove()。public interface Deleteable {
void delete();
}
public class Fred implements Deleteable {
public void delete() { /* 具體實現 */ }
public void doOtherStuff() { /* 類專有方法 */ }
}
// 使用端
public void deleteAll(Deleteable[] list) {
for (Deleteable d : list) d.delete(); // 多型調用
}
Collection 介面 → ArrayList/LinkedList/HashSet 多種實現,用戶代碼面向介面編程。default 方法賦予介面默認實現,進一步縮小與多重繼承差距,但仍要求顯式解決衝突。| 特性 | Java | C++ | C# |
|---|---|---|---|
| 物件模型 | 單根繼承 (Object),基本類型分離 | 多重繼承,無單根 | 單根 (object),基本類型為結構體 (值型別) |
| 記憶體管理 | GC (多代/並發/分代 ZGC) | 手動/智能指針/RAII | GC (世代/並發),支援 IDisposable 模式 |
| 跨平台 | JVM 位元碼 (WORA) | 原生編譯 (平台相關) | CLR IL (Windows 主導,.NET Core 跨平台) |
| 介面/契約 | interface + default/static/private 方法 | 純虛類 (抽象類) | interface + default 實現 (C# 8+) |
| 泛型實現 | 類型擦除 (運行時無泛型資訊) | 模板 (編譯期單態化,程式碼膨脹) | 保留泛型 (運行時具體化,List<int> 為值型別) |
Java 以**簡單性、安全性、可移植性**為核心價值三角,在工程規模化、生態豐富度、長期維護性上建立統治級優勢。理解核心特性的權衡本質,方能在架構選型與效能調優中做出最優決策。