Java
OpenJDK

2017年末において、Oracle JDK と OpenJDKに性能差はあるのか?

More than 1 year has passed since last update.

過去も、Oracle JDKとOpenJDKを比較する記事は多々ありました。

当時も、両者はだいたい一緒だし「将来的に両者の差分はなくなる」とした資料(PDF)もありました。

また、CPU アーキテクチャの違い、つまりIntelとARM上での性能差を示すこんな記事が過去にはありました。

そして、2017年も末、様々な動きがOracle JDK とOpenJDKにあります。

さて、今日においても Oracle JDK とOpenJDKに、性能の差はあるのでしょうか?

検証してみます。コードはこちらです。

Spring BootによるRest API アプリケーションで、テストコードでデータを1000回CRUD(作成して、参照して、変更して、削除)しています。

Oracle OpenJDKそれぞれ5回、系10回ぐらい計測してみます。

使用するJDKのバージョンは1.8.0_152、

Oracleはこちらから、OpenJDKはこちらから入手します。


Mac

手始めにMacで実行します。

MacBook Pro (Retina, 13-inch, Late 2012)

プロセッサ 2.9 GHz Intel Core i7
メモリ 8 GB 1600 MHz DDR3

ログの抜粋です。

Azul Systems, Inc. がOpenJDKです。

totalで、全件完了までにかかった時間、avrが一回のCRUDにかかった時間の平均です。マルチスレッドで実行しているので、平均*1000≠全件完了までにかかった時間 となります。

# summary  :Oracle Corporation 1.8.0_152, total :  13093, avr :50.50707070707071

# summary :Azul Systems, Inc. 1.8.0_152, total : 13219, avr :51.61749745676501
# summary :Oracle Corporation 1.8.0_152, total : 14221, avr :55.51567239635996
# summary :Azul Systems, Inc. 1.8.0_152, total : 14199, avr :55.383756345177666
# summary :Oracle Corporation 1.8.0_152, total : 14041, avr :54.699195171026155
# summary :Azul Systems, Inc. 1.8.0_152, total : 13726, avr :53.41538461538462
# summary :Oracle Corporation 1.8.0_152, total : 14385, avr :56.066869300911854
# summary :Azul Systems, Inc. 1.8.0_152, total : 12657, avr :49.50912778904665
# summary :Oracle Corporation 1.8.0_152, total : 14370, avr :55.76200204290092
# summary :Azul Systems, Inc. 1.8.0_152, total : 14021, avr :54.15415821501014

おお、有意差は見当たりませんね。


Linux x64

上記Macの上にVirtual BoxでCentOSを起動し、CPU 2,Mem 2048で動作させました。

# summary  :Oracle Corporation 1.8.0_152, total :  27041, avr :53.996

# summary :Azul Systems, Inc. 1.8.0_152, total : 28390, avr :56.06406406406406
# summary :Oracle Corporation 1.8.0_152, total : 27767, avr :54.964
# summary :Azul Systems, Inc. 1.8.0_152, total : 27635, avr :54.878
# summary :Oracle Corporation 1.8.0_152, total : 30113, avr :59.563
# summary :Azul Systems, Inc. 1.8.0_152, total : 26138, avr :51.66466466466466
# summary :Oracle Corporation 1.8.0_152, total : 28239, avr :55.88
# summary :Azul Systems, Inc. 1.8.0_152, total : 27637, avr :55.074
# summary :Oracle Corporation 1.8.0_152, total : 28477, avr :56.231
# summary :Azul Systems, Inc. 1.8.0_152, total : 27685, avr :54.856

同じく有意差は見つかりません。


Windows x64

Mac上のWindows 10 で同様に動かしてみました。

# summary  :Oracle Corporation 1.8.0_152, total :  88932, avr :170.171

# summary :Azul Systems, Inc. 1.8.0_152, total : 104348, avr :207.67
# summary :Oracle Corporation 1.8.0_152, total : 89635, avr :179.223
# summary :Azul Systems, Inc. 1.8.0_152, total : 92882, avr :179.815
# summary :Oracle Corporation 1.8.0_152, total : 84967, avr :165.057
# summary :Azul Systems, Inc. 1.8.0_152, total : 96394, avr :191.677
# summary :Oracle Corporation 1.8.0_152, total : 87724, avr :174.424
# summary :Azul Systems, Inc. 1.8.0_152, total : 83325, avr :164.012
# summary :Oracle Corporation 1.8.0_152, total : 89018, avr :169.627
# summary :Azul Systems, Inc. 1.8.0_152, total : 87105, avr :170.365

有意差はないように見えます。


Linux ARM 32

Raspberry Pi2 B上で動作させました。

# summary  :Oracle Corporation 1.8.0_152, total :  87153, avr :345.167

# summary :Azul Systems, Inc. 1.8.0_152, total : 98166, avr :389.905
# summary :Oracle Corporation 1.8.0_152, total : 86835, avr :345.236
# summary :Azul Systems, Inc. 1.8.0_152, total : 101888, avr :405.66166166166164
# summary :Oracle Corporation 1.8.0_152, total : 85945, avr :342.2522522522523
# summary :Azul Systems, Inc. 1.8.0_152, total : 97561, avr :385.345
# summary :Oracle Corporation 1.8.0_152, total : 87837, avr :345.8416833667335
# summary :Azul Systems, Inc. 1.8.0_152, total : 97551, avr :385.878
# summary :Oracle Corporation 1.8.0_152, total : 86338, avr :343.878
# summary :Azul Systems, Inc. 1.8.0_152, total : 96303, avr :383.2995991983968

おお!差異がありますね!おおよそ10%ほどOracke JDKの方が早い!


Linux ARM 64

PINE64 というARMのシングルボードコンピュータ上で試してみました。

# summary  :Oracle Corporation 1.8.0_152, total : 125477, avr :500.5605605605606

# summary :Azul Systems, Inc. 1.8.0_152, total : 67825, avr :267.8199195171026
# summary :Oracle Corporation 1.8.0_152, total : 123450, avr :492.10854271356783
# summary :Azul Systems, Inc. 1.8.0_152, total : 69810, avr :275.91691691691693
# summary :Oracle Corporation 1.8.0_152, total : 129602, avr :517.0773092369478
# summary :Azul Systems, Inc. 1.8.0_152, total : 67636, avr :265.72754793138245
# summary :Oracle Corporation 1.8.0_152, total : 125981, avr :501.3711133400201
# summary :Azul Systems, Inc. 1.8.0_152, total : 71870, avr :283.9637826961771
# summary :Oracle Corporation 1.8.0_152, total : 127799, avr :507.6098294884654
# summary :Azul Systems, Inc. 1.8.0_152, total : 69773, avr :275.34375

おおおおおお!相当の差異があります!OpenJDKの方が40%ほど早い!すごいですね。


まとめ

2017年末現在において、Intel上のMac,Linux,Windowsにおいて、優位な性能差は見られませんでした。

しかしながら、ARM上においては差異が認められ、とくに64bit上ではOpenJDKの方が40%も性能がよい、という結果が出ました。

これから、省電力性にまさるARMがサーバ用途で使われていくことは大いに考えられます。その際にOpenJDKを使っていれば、サーバの台数を大幅に削ることができ、費用面で優位になることが考えられます。更には各環境用のJDKには性能差異がないので、開発でもOpenJDKを使うことが可能ではないでしょうか?

どうでしょう?この際、開発環境と本番環境、すべてのJavaランタイムをOpenJDKで併せてみては!