Javaのバージョンと混乱しない方法

Javaのバージョンと混乱しない方法

JRE と JVM があることは知っています。Java でプログラミングしたこともあって、完全な初心者というわけではありません。しかし、最近とても混乱しているので、質問に対する最新の回答をいただければ幸いです。

使用している JRE と JVM のバージョンはどれですか。また、どれが最新ですか。

「ググってみて」と言いたくなる前に、私はすでにググってしまいました。だから混乱しているのです。

の中にJavaホームページそれはこう言います:

Java コントロール パネルの [全般] タブの [バージョン情報] セクションでバージョンを確認できます。[バージョン情報] をクリックすると、Java のバージョンを示すダイアログが表示されます。

まあ、私はそれを実行し、バージョン 8 Update71 を取得しました。

そのホームページにはこうも書かれています:

JRE と JDK は別々であり、システム上で共存できます。Mac にインストールできる JRE は 1 つだけです。システムには、必要な数だけ複数の JDK をインストールできます。

わかりました。もうわかっています。それで、ターミナルからバージョンを取得するために言われた通りにすると、

java -version
java version "1.8.0_71"
Java(TM) SE Runtime Environment (build 1.8.0_71-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.71-b15, mixed mode)

はい、同じようですね。それでは質問です。

どのバージョンをお持ちですか?バージョン8はJREバージョンですか?それともJVMバージョンですか?ホームページでは(引用のように)区別されていますが、バージョンを取得する手順は次のとおりです。同じ!

さらに事態を複雑にしているのは、ウィキペディア現在サポートされているバージョンは Java 8 と Java 11 であると書かれています。なぜ 2 つなのでしょうか? 9 と 10 はどうなったのでしょうか? また、これらは JRE ですか、それとも JVM ですか?

誰か私にこれを説明してくれませんか?

答え1

あなたの質問に対する答えは、同じ Wikipedia の記事に記載されているように思われます。

現在サポートされているのはJava 8とJava 11です長期サポート(LTS) バージョンであり、Java 10 は以前にサポートされていたラピッド リリース バージョンです。Java 10 のサポートは、Java 11 のサポートが始まったのと同じ日、2018 年 9 月に終了しました。Java 7 は公開サポートされなくなり、Java 9 は更新の受信を停止しました。Java 9 は短期的なラピッド リリース バージョンでしたが、Java 10 に置き換えられ、Java 8 の「公開更新の終了」は商用利用では 2019 年 1 月に予定されており、非商用利用では 2020 年 12 月より早くなることはありません。Java 11 については、Oracle による長期サポートは提供されません。代わりに、AdoptOpenJDK などのより広範な OpenJDK コミュニティが作業を行うことが期待されています。

つまり、バージョン 9 と 10 は短命でした。深刻なセキュリティ バグに対応するために急いで出された暫定的な対策だったのだと思います。

バージョン 8 は、Oracle によってサポートされている最後のバージョンであり、JDK と JRE に分かれています。バージョン 11 ではこの区分がなくなり、OpenJDK に基づく統合 JDK バージョンのみになっているようです。そのため、Oracle の Java の有料バージョンにあるようなパフォーマンス強化は行われない可能性があります。

Linux にインストールされているバージョンを確認するには、インストールされているパッケージを照会できると思います。

Windows では、32 ビットおよび 64 ビットのレジストリでその情報を見つけることができます。

  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft
  • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft

この情報は以下でもご覧いただけます。コントロール パネル > Java (32 ビット)または コントロール パネル > Java (64 ビット):

ここに画像の説明を入力してください

答え2

あなたはいくつかの用語を混同しています。また、あなたは Mac を使用していますが、Oracle もいくつかの用語を混同しています。

4つの異なるものがあると思います。

  1. JVM (Java 仮想マシン) は、Java のすべてのリリースに含まれており、Java でコンパイルされたクラス ファイルを実行する実行可能ファイルです。直接ダウンロードすることはできませんが、他の 3 つの項目の一部です。java -version は、使用しているバージョンを表示します。

  2. JDK(Java 開発キット) これは、プログラムを作成する場合に必要なインストールです。コンパイラとその他のツールが含まれています。Oracle リリースの macOS の場合、これは /usr/bin/java で起動できる環境を提供する唯一のダウンロードです。

  3. JRE (Java ランタイム環境)。Windows、Linux、および Apple の Java リリースでは、コマンド ラインから Java プログラムを実行するために必要な最小限のファイル セットが提供されます。Oracle macOS リリースの一部としては存在しないようですが、これは Java バージョンで表示される Java(TM) SE ランタイム環境です。

  4. macOS 上の JRE (Java Runtime Environment)。Oracle が提供する、ブラウザで Java アプレットを実行する環境です。Mac にインストールできる JRE は 1 つだけです。また、システム環境設定の Java コントロール パネルで確認および更新される JRE でもあります。

したがって、macOS では、コマンド ラインから JRE と JVM を含む JDK をインストールし、これらを複数のバージョンで使用できます。また、ブラウザーでアプレットを実行し、Java コントロール パネルにある別の JRE (コマンド ラインと同じではありません) もありますが、これらを 1 つだけ使用できます。

バージョン番号などについては、私が理解している限りではバージョン8以降はバージョン番号が変更されています。Wikipediaによると

2017年9月、Javaプラットフォームのチーフアーキテクトであるマーク・ラインホールドは、リリーストレインを現在の2年スケジュールではなく「6か月ごとに1つの機能リリース」に変更することを提案し[1][2]、後にこの提案は発効しました。

したがって、9、10は11に置き換えられ、12は2019年3月に予定されています。https://en.wikipedia.org/wiki/Java_バージョン履歴サポートのタイミングと内容については、

コマンドラインから使用できるJVMを見つけるには、次のコマンドを実行します。/usr/libexec/java_home -V

私は

/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
Matching Java Virtual Machines (6):
11.0.1, x86_64: "OpenJDK 11.0.1"    /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
10.0.1, x86_64: "Java SE 10.0.1"    /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_171, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
1.8.0_92, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
1.8.0_77, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home

JDKのインストールと選択については、https://stackoverflow.com/questions/52524112/how-do-i-install-java-11-on-mac-osx-allowing-version-switching

関連情報