web-dev-qa-db-ja.com

OpenJDK vs Java HotspotVM

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である場合、それらの主な違いは何ですか?彼らは異なるランタイムフラグセットを持っていますか?

18
arvist

Oracle HotSpot JVMは、OpenJDK HotSpotプロジェクトに基づいています。したがって、それらはほとんど同じVMですが、Oracle JVMには、主に Java Flight RecorderApplication 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}
13
apangin

tl; dr

apanginによる回答 は古くなっています。

Java 11のような最近のバージョンの場合、Oracle JDK製品はOpenJDKプロジェクトと実質的に同じです。OpenJDKには、オラクルの以前の製品: JavaフライトレコーダーJavaミッションコントロールアプリケーションクラス-データ共有 、および [〜#〜] zgc [〜#〜]

Oracle.comブログを引用するには

Java 11以降、したがって、Oracle JDKビルドとOpenJDKビルドは基本的に同じになります。

Oracle JDKOpenJDK収束

オラクルはこの数年で劇的な変化を遂げました。

オラクルは、ブランドのOracle JDKOpenJDKと機能パリティに統合する意図を宣言しました。どちらも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ソースを選択する際のガイドとして作成しました。

 Flowchart guiding you in choosing a vendor for a Java 11 implementation 

オラクルは、緊急の修正またはセキュリティの脆弱性について、自社ブランドの製品にパッチを適用する権利を留保します。しかし、同社は他のOpenJDKメンバーにも貢献し、調整する意向を表明しています。オラクルは引き続きJava商標を所有し、Javaプラットフォームの未来をリードしています。既存の 長期サポート(LTS) バージョンの場合8と11は、Oracleが スチュワードシップをRedHatに譲渡した[〜#〜] ibm [〜#〜] )。

 Motivations in choosing a vendor for Java 

HotSpotOpenJ9

ここの質問は尋ねます:

OpenJDK VMとOracle Hotspot VMはまだ2つの異なるJVMですか?

上記で説明したように、2つの製品は機能の平等に収束しています。 HotSpot テクノロジーについては、以下をお読みください。

HotSpotは、前述のように、Oracle JDKとOpenJDKの両方のコンポーネントの1つです。今日のHotSpotは、 JRockit のパーツも組み合わせます。オラクルは、 Sun Microsystems および BEA Systems から取得した、両方の最良のJavaエンジンをマージしました。

AdoptOpenJDKプロジェクトは、 Eclipse OpenJ9J9に基づいて、 [〜#〜] ibm [〜#〜] から寄付)を使用してOpenJDKのビルドも提供しますHotSpotの代替。 AdoptOpenJDK Webサイトからダウンロードする場合、HotSpotまたはOpenJ9のいずれかを選択しますメニュー。

現在、テストではOpenJ9の起動が劇的に高速で、メモリ使用量が大幅に少ないように見えますが、HotSpotは継続的に使用すると高速に実行できます。しかし、これはまだOpenJ9の初期段階なので、最新の開発を自分で調べてください。

 Chart showing history of HotSpot & JRockit merging, and OpenJ9 both available in AdoptOpenJDK 

15
Basil Bourque