OpenJDK 14 性能保持提升但OpenJDK 8 仍是最強王者
OpenJDK 14 已於近日GA,其在性能方面是否有改進、以及有哪些改進引起了不少開發者的關注。本文將會介紹通過運行新的基準測試以考察從OpenJDK 8 至14 的所有主要發行版本,同時考察跨多個工作負載的JVM 性能,以及OpenJDK 14 與JVM 先前版本相比性能如何。
此次測試通過在被測試的每個發行版上使用相同的Java 字節碼編譯的Java 程序來查看JVM 的性能,並使用被測軟件包的參考/上游編譯版本。為了保證測試受干擾的因素將降至最低,每次都使用相同的選項,除了交換用於測試每個發行版的OpenJDK x86_64 Linux 構建之外,沒有進行任何其他更改。
通過使用Phoronix 的測試套件,測試內容包含從SPECjbb 到Java 2D 工作負載。
測試環境以及測試機器配置:
首先通過使用Java 2D 基準測試對Java 圖形管道的性能進行壓測,可以看到文本渲染性能一直穩步提升,直到第12 版達到最高點,然後逐漸下降為目前13 和14 的水平,與OpenJDK 8 比較相似。
而在Java 2D 的圖像渲染性能方面,它們的水平基本保持一致,但是OpenJDK 14 以微弱的的性能優勢成為了最好性能的那個。
這裡還測試了使用矢量圖形的渲染效果,水平基本保持一致。
通過進行非常基本的Java SciMark 微基準測試,可以看到OpenJDK 8 目前為止是最快的,並且自OpenJDK 9 至14 以來,性能基本上持平。OpenJDK 的運行速度約為OpenJDK 8 的88%。
通過使用Java Bork 文件加密軟件包進行測試,在經過測試的版本中,性能基本上沒有變化。
自OpenJDK 8 以來,DaCapo 的H2 基準被建模為類似於JDBCbench 的內存中(in-memory)基準,其性能得到了很好的提升,與此前的版本相比,OpenJDK 14 再次以微弱的優勢獲得了第一名。
可以看到,基於Python Pybench 的Jython 基準測試也是OpenJDK 8 擁有最佳成績的眾多案例之一。
在運行Daytrader 基準測試的Tradebeans 測試中,OpenJDK 14 再度以微弱的優勢拿下最佳的成績。
就像打乒乓球一樣,Renaissance 的Scala Dotty 基準測試提供了一個類似的例子,說明OpenJDK 的性能也會上下波動。在此次測試中,OpenJDK 14 又比最近的版本好一些。
在其他一些Renaissance 基準測試中,OpenJDK 11〜12 的性能反而最差,而OpenJDK 14 提供的性能與OpenJDK 8 類似。
在使用Jenetics+Futures 遺傳算法的Renaissance 基準測試中,所有版本的性能基本保持一致。
通過觀察使用Apache HBase 進行的這幾個基準測試,可以發現OpenJDK 8 運行最快,或者這幾個Java 版本的性能基本持平。
在使用SPECjbb進行的基準測試中,OpenJDK 8是迄今為止最快且明顯拉開距離的版本。自版本11起,OpenJDK的SPECjbb性能有所提高,不過在運行Ubuntu Linux的AMD Ryzen 9 3950X系統上,任何版本的速度均未達到OpenJDK 8的速度。
結論:
當對所有執行的Java基準測試結果取幾何平均值時,OpenJDK 8毫無疑問是最快的Java版本。業界經常聽到有關OpenJDK 8仍可提供最佳性能的消息,以及為什麼英特爾的Clear Linux在有眾多選擇的情況下仍堅持該版本的原因。從本文的測試結果來看,這不足為奇。
好消息是,從這種幾何意義上來看,OpenJDK 14 是經過測試的發行版中第二快的版本。與之前的版本相比,其領先優勢雖然很小,但整體來看畢竟是在保持進步。