JVM 実装の違いはどこですか (ライセンスを除く)? すべての JVM は Generic 処理のために Type Erasure を実装していますか?
次の違いはどこにありますか。
- JRockit
- IBM JVM
- SUN JVM
- JDKを開く
- ブラックダウン
- カフェ
..... それらの 1 つに Tail-Call-Optimization を適用しますか?
JVM 実装の違いはどこですか (ライセンスを除く)? すべての JVM は Generic 処理のために Type Erasure を実装していますか?
次の違いはどこにありますか。
..... それらの 1 つに Tail-Call-Optimization を適用しますか?
JVM の実装は、JIT コンパイル、最適化、ガベージ コレクション、サポートされているプラットフォーム、サポートされている Java のバージョンなどを実装する方法が異なる場合があります。Java バイトコードを正しく実行するには、すべての実装が一連の機能と動作を満たしている必要があります。
ご指摘のとおり、主な違いはライセンスにある傾向があります。その他の非技術的な違いは、無料/有料のサポート オプション、他のテクノロジ (通常は J2EE サーバー) との統合、およびソース コードへのアクセスにある傾向があります。
注: J2EE サーバーは JVM 上で実行されますが、一部のサーバーには、JVM のパフォーマンスを監視、分析、調整するためのツールが統合されています。
技術的な違いに関する限り、それらは何年にもわたってそれほど重要ではありません。むかしむかし、IBM と JRockit の JVM は、リファレンスの Sun 実装よりもはるかに優れたパフォーマンスを発揮していました。これは、実行時の最適化の種類、ガベージ コレクションの違い、およびネイティブ コードの違い (およびさまざまなクラスが使用するネイティブ コードの量) の大きな違いによるものです。これらのパフォーマンスの違いは、もはやそれほど重要ではありません。
一部の JVM には、診断および監視ツールが含まれているか、それらと統合されています。JRockit には、JVM パフォーマンスを監視するための一連のツールが含まれています。Sun は、同じことを行うために重複する機能を備えたさまざまな JMX ベースのツールを提供しています。むかし、IBM Websphere には、J2EE アプリケーション サーバー全体用の同様のツール セットが含まれていました (まだ含まれているかどうかはわかりませんが、今でもそうであると思います)...
一部のオープン ソース JVM は、ゼロから再開発されているため、パフォーマンスが少し遅くなる傾向があります。そのため、彼らはもう少し追いつく必要があります。約 2 年前に最後に確認したところ、Blackdown は Sun JVM よりも大幅に遅かった (1.5 倍から 2 倍?)。また、サポートされている Java のバージョンよりも少し遅れていました。
型消去はコンパイラ関数であり、JVM に依存しません。
JVM は、クラスとバイトコードバリファイアをロードし、コードを実行する仮想マシンのようなものです。Applocaion Programming Interface はパッケージのコレクションです。パッケージはクラスのコレクションです。Java プログラムは、JVM がインストールされ動作する場所で実行されます。
JIT コンパイルは、一部の JVM にない機能の 1 つです。
型の消去などは、古い JVM との下位互換性を保つためにコンパイラによって行われます。ほとんどの JVM は必要なすべての機能をサポートする必要がありますが、一部の JVM は他の機能よりも最適化されている場合があります。Sun JVM がおそらく最速だと思います。
JVM が Java であると主張する場合、多くのストック機能を提供して、TCK を渡す必要があります。
違いは、ガベージ コレクション、Sun JVM の jconsole/visualvm、プリコンパイルなど、コア以外の場所にあります。
明確化: TCK は、正式に Java に準拠するために仮想マシンが合格する必要があるテスト スイートです。