2009-04-14 12 views
15

JVM実装の違いはどこですか(ライセンスを除く)? ジェネリックハンドリングのためにすべてのJVMがタイプ消去を実装していますか?JVM実装の相違点

間の違いがあり

  • のJRockit
  • IBM JVM
  • SUN JVM
  • オープンJDK
  • Blackdownの
  • あるKaffe

.... 。 Tail-Call-Optimizationでそれらの1つを扱う?

答えて

15

JITのコンパイル、最適化、ガベージコレクション、サポートされているプラ​​ットフォーム、サポートされているJavaのバージョンなどはJVMの実装方法によって異なります.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のサポートされているバージョンの少し後ろだった。

+0

5年以上前からJRockitを使用していた人がいるので、全体的にはホットスポットより速いとは言えませんが、確かに堅牢ではありません。彼らはスピードのために信頼性を犠牲にし、何もせずに終わる。 – erickson

+0

@erickson、JRockitを自主的に5年以上使用してきた人として、あなたの経験は普遍的ではないと言えるでしょう。 JRockitはメモリリーク検出ツールでも少なくとも1回は保存しています。 :)私はSun VMsよりも、それ以上のクラッシュはありませんでした(ただし、1つまたは2つありました)。 – jsight

11

消去のタイプはcompiler functionであり、そのようなJVMには依存しません。

1

JITコンパイルでは、JVMにはないものがあります。

+0

Sun JVMについてhttp://java.sun.com/javase/technologies/hotspot/ ホットスポットのJITコンパイラは、すべてのJVMリリースで混乱しているようです。 –

+0

あなたが何を言いたいのか分かりませんが、ホットスポットはSun JVMの一部です。 –

+0

なぜ、ほとんどのJVMの一部であるときに、evey JVMにJITコンパイルがないのですか?なぜあなたは私を投票していますか? –

1

以前のJVMとの下位互換性を保つために、型消去のようなことはコンパイラによって行われます。ほとんどのJVMは必要なすべての機能をサポートする必要がありますが、一部の機能は他の機能よりも最適化されている場合があります。私はSunのJVMがおそらく最も速いと推測しています。

1

JVMがJavaであると主張する場合、JVMはTCKに合格しなければならず、多くの株式を提供する必要があります。

違いが


プリコンパイルなど、ガベージコレクション、Sun JVMの中にjconsole/VisualVMのように、非中核の場所で明確化されている:TCKは、仮想マシンが通過しなければならないテストスイートであります正式にJavaに準拠するためです。

+0

テクノロジー互換性キット。 http://jcp.org/en/resources/tdk –

1

テールコールの最適化は、Javaではまだサポートされていません。 John Roseはこれを将来のリリースに組み込む努力をリードしており、approach, and some of the issuesが関わっていると述べています。

+0

私はJava6(実験的な機能)のオプションについて覚えています。おそらく、Sun JDKは実験的なものとしてサポートしていますか? "Da vinchi VM"についてTCOをサポートすべきだと聞きました! –

+0

はい、da Vinciプロジェクトは、他の言語のサポートに対応しており、サポートがプロトタイプ化されています。 – erickson

+0

この最適化のいくつかの並べ替え(tail-recursionのみ)はIBM JVMでサポートされています(メソッドの先頭に戻るようなもの) –

1

JVMの別の違いは、文書化されていないAPIの動作です。 (例:com.sun.xxx) たとえば、SunのJVMとIBMのJVMの両方で、信号処理に関する動作が少し異なります。 (IBMのJVMではアプリケーションが「INT」信号をトラップすることができない場合があります)。

1

JVMは、クラスとBytcodeのバリエータをロードしてコードを実行する仮想マシンのようなものです。 Applocaion Programming Interfaceはパッケージのコレクションです。パッケージはクラスのコレクションです。 Javaプログラムは、JVMがインストールされ、動作する場所で実行されます。