現代 JVM 中的物件分配(new Object())常見路徑僅需 10 條機器指令(HotSpot 1.4.2+),而 C/C++ 最佳 malloc 實作平均需 60–100 條指令。更關鍵的是,許多 C/C++ 程式(如 Perl、Ghostscript)總執行時間的 20%–30% 耗費在 malloc/free 上,遠超健康 Java 應用在分配與 GC 的開銷。
傳統 malloc/free 單塊處理記憶體,GC 採用批次方式,創造更多優化機會。研究表明:以保守的 Boehm-Demers-Weiser (BDW) GC 取代 malloc,許多 C++ 程式反而加速。JVM 的精確移動式收集器更能進一步優化。
JVM 透過逃逸分析判斷物件是否僅在單一線程、單一棧幀生命週期內使用。若是,可直接在棧上分配,甚至將物件標量替換為暫存器欄位,完全消除堆分配開銷。Java SE 6 (Mustang) 已引入此優化。
讓 JVM 根據實際運行情況在堆/棧分配間動態抉擇,開發者即可獲得棧分配的性能優勢,又無需承擔手動記憶體管理的風險與複雜度。