Computer

SDKMAN!でインストールするOpenJDKの選び方

1. 概要

SDKMAN!ではさまざまなベンダーのOpenJDKを利用できますが、

sdk list java

を実行したらズラリと何十ものJDKが表示され、どれをインストールしたらいいのか戸惑ったという方もいると思います。

本記事では、JDKの選び方や違いについて調べた内容を紹介します。

2. とりあえずJDKが使えればいい場合

これからJavaを学びたい、とりあえず最も一般的なJDKを使えるようにしたいという方は、AdoptOpenJDKのバージョン11の最後に"hs" (HotSpotの略)とついているものを使っておくのが無難でしょう。("hs"と"j9"の違いについては後述)

下の例でいうならば、「11.0.10.hs-adpt」が、「AdoptOpenJDK 11の最新版」ということになります。

blank

3. Java FXが必要か

Java FXはデスクトップアプリケーションを開発するためのGUIライブラリです。

JDK 11以降、Java FXはOpenJDKには含まれていないので、必要な場合は自分でダウンロードしてインストールする必要があります。

しかしAzul ZuluとBellSoftはJava FX同梱のJDKも配布しているので、これらのJDKを使えば手動でJava FXをインストールする手間が省けるので便利でしょう。

Java FXがパッケージされているJDKは、バージョンの最後が「fx」となっています。

4. バージョンを決める

2021年3月現在、Javaは8と11がLTSバージョンとなっています。LTSはLong Term Support(長期サポート)の略で、互換性が破壊されるような大きな変更がなく、セキュリティ修正などを受けられる安定版と考えられます。そのため、安定性が求められるシステムではLTS版を使い、15や16といったLTSでないバージョンの使用は、最新機能の評価や学習、予期せぬ問題が発生しても問題ない個人プロジェクトなどに限定するのが無難です。

企業のシステムなどではJava 8がまだ健在ですが、過去のしがらみがない場合はJava 11を使うのがいいでしょう。

ちなみに次のLTSはJava 17で、2021年9月リリース予定です。

5. ベンダーを選ぶ

Java FXが必要なく、バージョンはLTSでよければどのベンダーのJDKでも選べます。

ライセンスの形態や商用サポートの有無などで違いはあるものの、どのベンダーのJDKもオープンソースのOpenJDKのコードを元にしているようですし、SDKMAN!で利用できるものはすべて無償で使えるものなので、ライセンスや互換性という意味ではどのJDKを選んでも問題ないでしょう。ちなみに、シェアでいうとJava.net(OracleのOpenJDK)とAdoptOpenJDKが圧倒的に高いそうです。

ただ、これから紹介するものは他のJDKにはないユニークな機能を備えているので覚えておいて損はなさそうです(私はすべて初耳でした)。

Eclipse OpenJ9 JVM搭載のAdoptOpenJDK

AdoptOpenJDKは、バージョンに「hs」が含まれるものと「j9」が含まれるものがあります。

blank

「hs」はHotSpot、「j9」はEclipse OpenJ9の略で、同梱しているJVMが違います。

HotSpot VMは標準のOpenJDKに使われていて幅広く使われているものですが、一方のEclipse OpenJ9はIBMが開発してEclipseに寄贈したJVMの実装で、起動時間が早くメモリの使用量が少ないという特徴があるそうです。

こちらのサイトによれば、実行速度を多少犠牲にするものの、メモリの使用量はかなり減らせるとのことで、メモリが不足しがちな環境ではOpenJ9 VMは効果的かもしれません。

TravaOpenJDK

TravaOpenJDKは「開発者のためのOpenJDK」であり、「dcevmとHotswapAgentとの統合により、高度なホットスワップを可能にする」とあります。

TravaOpenJDKという名前も、dcevmもHotswapAgentもすべて初耳ですが、アプリケーションの再起動をせずにプログラムの変更を可能にする仕組みで、開発中にIDEと連携させてプログラムの修正と動作確認を繰り返すような時に威力を発揮しそうです。

そして「開発者のためのOpenJDK」とあるように、開発時にはTravaOpenJDKを使って、運用時には別のJDKを使うといった使い分けが効果的なのででしょうね。

GraalVM

私自身はまだ使ったことはないのですが、GraalVMにはJavaプログラムをJVMを介さずに実行可能なネイティブなプログラムにコンパイルするnative-imageという機能があるそうです。

現時点ではビルド構成の難易度や既存のJavaライブラリとの互換性など、実用するにはかなりの困難を伴いそうな感じに見受けましたが、将来的にJavaでネイティブなPC向けのアプリケーションを作ったり、サーバーアプリをネイティブ化してコンテナにするということが可能になれば、Javaの存在感はさらに大きくなると予想します。

まとめ

とりあえずJavaが動けばいいという場合はAdoptOpenJDKのVersion 11でHotspot VM ("hs")の最新版をインストールし、ベンダー独自の機能や特徴を試してみたい場合は、SDKMAN!を使えば複数のJDKの追加と削除、切り替えが非常に容易に行えるので、気になるJDKをインストールして試してみることをおすすめします。

 

 

 

 

 

 

-Computer

Copyright© dawaan , 2021 All Rights Reserved.