過去も、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で併せてみては!