OpenJDK VMとOracle Hotspot VMはまだ2つの異なるJVMですか?
OpenJDK VMについての公式ドキュメントが見つからないようです。 OpenJDKホームページにもHotSpot VMを開発するHotSpotグループがあります。
HotSpotグループは、HotSpot仮想マシンの設計、実装、保守に関わる開発者で構成されています
ただし、WindowsマシンでJava -versionをチェックすると、出力されます
Java HotSpot(TM)64ビットサーバーVM
しかし、私のUbuntu VPSでは
OpenJDK 64ビットサーバーVM
それらが2つの異なるVMである場合、それらの主な違いは何ですか?彼らは異なるランタイムフラグセットを持っていますか?
Oracle HotSpot JVMは、OpenJDK HotSpotプロジェクトに基づいています。したがって、それらはほとんど同じVMですが、Oracle JVMには、主に Java Flight Recorder 、 Application Class Data Sharing および協調メモリ管理などのいくつかの追加の商用機能があります。
ランタイムフラグは両方のVMでほぼ同じです。使用して完全なリストを参照してください
-XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal
JDK 8u131以降、唯一の違いは次のフラグです(OpenJDK VMにはありません)。
bool EnableResourceManagementTLABCache = true {product}
bool EnableSharedLookupCache = true {product}
bool FlightRecorder = false {commercial}
ccstr FlightRecorderOptions = {product}
bool LogCommercialFeatures = false {product}
ccstr MemoryRestriction = none {commercial}
bool ResourceManagement = false {commercial}
intx ResourceManagementSampleInterval = -1 {commercial}
ccstr StartFlightRecording = {commercial}
bool TraceSharedLookupCache = false {product}
bool UnlockCommercialFeatures := true {commercial}
bool UseAppCDS = false {commercial}
apanginによる回答 は古くなっています。
Java 11のような最近のバージョンの場合、Oracle JDK製品はOpenJDKプロジェクトと実質的に同じです。OpenJDKには、オラクルの以前の製品: Javaフライトレコーダー 、 Javaミッションコントロール 、 アプリケーションクラス-データ共有 、および [〜#〜] zgc [〜#〜] 。
Java 11以降、したがって、Oracle JDKビルドとOpenJDKビルドは基本的に同じになります。
オラクルはこの数年で劇的な変化を遂げました。
オラクルは、ブランドのOracle JDKをOpenJDKと機能パリティに統合する意図を宣言しました。どちらもOpenJDKコードベースに基づいています。
そのために、Oracleが販売していた以前の商用ツールである Flight Recorder および Mission Control は現在、オープンソースで提供されています。 OpenJDKプロジェクトに。 OpenJDKサイトの this および this を参照してください。
OracleとOpenJDKコンソーシアムの他のメンバーは、OpenJDKコードベースを完全にオープンソースにし、GNU GPL + linking exception以外のライセンスに邪魔されないようにするために、さらに多くのソースコードを提供しました。
Oracleは、 ライセンスを変更しました 条件。Oracle JDKブランド製品は、本番環境で使用するために無料で提供されなくなりました。または、OpenJDKの無料配布を、Oracleを含む6社以上のベンダーから入手できます。詳細については、Javaコミュニティ、 Javaはまだ無料です の柱によって書かれた重要なホワイトペーパーを参照してください。
このフローチャートは、JDKソースを選択する際のガイドとして作成しました。
オラクルは、緊急の修正またはセキュリティの脆弱性について、自社ブランドの製品にパッチを適用する権利を留保します。しかし、同社は他のOpenJDKメンバーにも貢献し、調整する意向を表明しています。オラクルは引き続きJava商標を所有し、Javaプラットフォームの未来をリードしています。既存の 長期サポート(LTS) バージョンの場合8と11は、Oracleが スチュワードシップをRedHatに譲渡した ( [〜#〜] ibm [〜#〜] )。
ここの質問は尋ねます:
OpenJDK VMとOracle Hotspot VMはまだ2つの異なるJVMですか?
上記で説明したように、2つの製品は機能の平等に収束しています。 HotSpot テクノロジーについては、以下をお読みください。
HotSpotは、前述のように、Oracle JDKとOpenJDKの両方のコンポーネントの1つです。今日のHotSpotは、 JRockit のパーツも組み合わせます。オラクルは、 Sun Microsystems および BEA Systems から取得した、両方の最良のJavaエンジンをマージしました。
AdoptOpenJDKプロジェクトは、 Eclipse OpenJ9 (J9に基づいて、 [〜#〜] ibm [〜#〜] から寄付)を使用してOpenJDKのビルドも提供しますHotSpotの代替。 AdoptOpenJDK Webサイトからダウンロードする場合、HotSpotまたはOpenJ9のいずれかを選択しますメニュー。
現在、テストではOpenJ9の起動が劇的に高速で、メモリ使用量が大幅に少ないように見えますが、HotSpotは継続的に使用すると高速に実行できます。しかし、これはまだOpenJ9の初期段階なので、最新の開発を自分で調べてください。