HotSpot ( Java HotSpot Performance Engineとしてリリース)[ 1 ]は、デスクトップおよびサーバーコンピュータ向けのJava仮想マシンで、 Sun Microsystemsによって開発され、2010年にOracle Corporationに買収されてその部門となりました。その機能には、ジャストインタイムコンパイルや適応型最適化などの方法によるパフォーマンスの向上が含まれます。事実上の標準Java仮想マシンです。
Java HotSpot Performance Engine は 1999 年 4 月 27 日にリリースされました[ 1 ] 。これは、もともと Animorphic として取引されていた Longview Technologies によって開発された、 Smalltalkプログラミング言語の実装であるStrongtalk の技術に基づいて構築されています。Longview 仮想マシンはSelf仮想マシンをベースにしており、高速で単純な最初のコンパイラの代わりにインタプリタが使用されていました。Sun が Self プロジェクトを中止したとき、主要人物の 2 人、Urs HölzleとLars Bak がSun を離れ、Longview を設立しました。1997 年にSun Microsystems がAnimorphic を買収しました。[ 3 ]
Animorphic を買収した直後、Sun はJava 仮想マシン用のより強力なジャストインタイム (JIT) コンパイラを開発することを決定しました。 [ 4 ] HotSpot サーバーコンパイラ (内部名 C2) は、当初Clifford Clickによって開発され[ 5 ]、コンパイラの最適化に関する彼の博士論文の拡張でした。[ 6 ] HotSpotというコンパイラ名は、ソフトウェアの動作に由来しています。Self VM と同様に、HotSpot はJava バイトコードを実行する際に、頻繁にまたは繰り返し実行されるホットスポットをプログラムのパフォーマンスから継続的に分析します。これらのホットスポットは最適化の対象となり、パフォーマンスがそれほど重要でないコードに対して最小限のオーバーヘッドで高性能な実行を実現します。あるレポートでは、JVM がいくつかのベンチマークで一部のC++またはCコードに勝ったと報告されています。[ 7 ]
当初は Java 1.2 のアドオンとして利用可能だったHotSpot は、Java 1.3 で Sun JVM のデフォルトになりました。[ 8 ] [ 9 ]
JRE(元々はSun Microsystems、現在はOracleが提供)には、クライアントとサーバーという2つの仮想マシンがあります。クライアント版は高速ロードに最適化されており、インタープリタ方式を採用しています。サーバー版はロード速度は遅いものの、パフォーマンス向上のために高度に最適化されたJITコンパイルに力を入れています。どちらの仮想マシンも、実行頻度の高いメソッドのみをコンパイルし、コンパイルするメソッドは設定可能な呼び出し回数のしきい値に基づいて決定します。
Java 7 で導入された階層コンパイルは、クライアントコンパイラとサーバーコンパイラを連携して使用することで、サーバーコンパイラよりも起動時間を短縮しつつ、同等以上のピークパフォーマンスを実現します。[ 10 ] Java 8 以降では、サーバー VM のデフォルトは階層コンパイルです。[ 11 ]
HotSpotはC++とアセンブリ言語で記述されています。2007年、Sunはソースコードが約25万行あると推定しました。[ 12 ] HotSpotは以下の機能を提供します。
HotSpot は、仮想マシンの実行オプションのための多くのコマンドライン引数をサポートしています。一部は標準であり、準拠するJava 仮想マシンには必ず存在します。その他は HotSpot 固有のものであり、他の JVM には存在しない場合があります (-X または -XX で始まるオプションは非標準です)。[ 16 ] [ 17 ] [ 18 ] [ 19 ]
2006年11月13日、HotSpot JVMとJava Development Kit (JDK)はGNU General Public License(GPL)バージョン2の下でライセンスされました。[ 20 ]これはJava 7の一部となったコードです。[ 21 ]
Java Development Kit (JDK)全体と同様に、HotSpot はOracle CorporationによってWindows、Linux、およびmacOSでサポートされています。サポートされている命令セットアーキテクチャ (ISA) はx86-64とAArch64です。[ 22 ] JDK 15 以降、SolarisとSPARC はサポートされなくなりました。[ 23 ]
サードパーティによって、他の様々なUnix系オペレーティングシステム向けの移植版も提供されています。x86、 PowerPC、SPARC(Solarisのみ)など、複数の異なるハードウェアアーキテクチャがサポートされています。
HotSpot の移植は困難です。なぜなら、その大部分がアセンブリ言語でほぼ完全に記述されているからです。[ 24 ]ただし、いくつかのセクションは標準に準拠した ISO C++で記述されています。この問題を解決するために、IcedTeaプロジェクトは、アセンブリ コードをほとんど含まないゼロ アセンブラ Hotspot (またはzero ) と呼ばれるHotSpotインタプリタの汎用ポートを開発しました。このポートは、HotSpot のインタプリタ コンポーネントを任意のLinuxプロセッサ アーキテクチャに簡単に適応させることを目的としています。ゼロ アセンブラ Hotspotのコードは、バージョン 1.6 以降、HotSpot のすべての非x86アーキテクチャ ポート ( PowerPC、Itanium ( IA-64 )、S390 、およびARM ) に使用されています。[ 25 ] [ 26 ] [ 27 ]
[...] AnamorphicはSunに買収されたので、元のチームはAnamorphicという会社にいました。彼らはSmalltalkを対象とした技術を持ってきて、それをJava向けに再ターゲットし、その後すぐに私を雇って仮想マシン用の新しいJITを開発させました。
/C++のヘッダーファイルとソースファイルは1500近くあり、コード行数は約25万行に及ぶ。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)