該文通過與Rust對比發現:
- 包裝原始類型的Optional導致速度下降高達 8 倍,并顯著提高了分配率。逃逸分析優化失敗。
- Optional在對性能極其敏感的 JAVA 代碼中使用值可能是個壞主意。此處測試的所有 JVM 都未能優化它們。
- 事實證明,最丑陋和最容易出錯的解決方案是最快的:原始類型和魔法值。
- 不要指望 JVM 利用了解目標 CPU 并自動利用現代指令集(如 AVX)。實際上,即使sumSimple是矢量化的教科書案例,也沒有在這里進行矢量化。
- 了解程序的實際性能配置文件也沒有給 JVM 帶來任何優勢。
- 幸運的是,上述建議不適用于 Rust。RustOption在大多數情況下是零成本的,即使沒有內聯,增加的成本也很小。您不必犧牲代碼可讀性或安全性來提高速度。
- Option為我的 CPU 優化的Rust 代碼返回比 Java 代碼返回快30倍以上,如果以可移植的方式編譯并使用默認設置和無矢量化,仍然快10 倍以上。
- 語言及其編譯器在優化強度上有很大差異。不要假設所有可以編譯為機器代碼的語言都是相同的。