JVM実装の違いはどこですか(ライセンスを除く)? ジェネリックハンドリングのためにすべてのJVMがタイプ消去を実装していますか?JVM実装の相違点
間の違いがあり:
- のJRockit
- IBM JVM
- SUN JVM
- オープンJDK
- Blackdownの
- あるKaffe
.... 。 Tail-Call-Optimizationでそれらの1つを扱う?
JVM実装の違いはどこですか(ライセンスを除く)? ジェネリックハンドリングのためにすべてのJVMがタイプ消去を実装していますか?JVM実装の相違点
間の違いがあり:
.... 。 Tail-Call-Optimizationでそれらの1つを扱う?
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のサポートされているバージョンの少し後ろだった。
消去のタイプはcompiler functionであり、そのようなJVMには依存しません。
JITコンパイルでは、JVMにはないものがあります。
Sun JVMについてhttp://java.sun.com/javase/technologies/hotspot/ ホットスポットのJITコンパイラは、すべてのJVMリリースで混乱しているようです。 –
あなたが何を言いたいのか分かりませんが、ホットスポットはSun JVMの一部です。 –
なぜ、ほとんどのJVMの一部であるときに、evey JVMにJITコンパイルがないのですか?なぜあなたは私を投票していますか? –
以前のJVMとの下位互換性を保つために、型消去のようなことはコンパイラによって行われます。ほとんどのJVMは必要なすべての機能をサポートする必要がありますが、一部の機能は他の機能よりも最適化されている場合があります。私はSunのJVMがおそらく最も速いと推測しています。
JVMがJavaであると主張する場合、JVMはTCKに合格しなければならず、多くの株式を提供する必要があります。
違いが
プリコンパイルなど、ガベージコレクション、Sun JVMの中にjconsole/VisualVMのように、非中核の場所で明確化されている:TCKは、仮想マシンが通過しなければならないテストスイートであります正式にJavaに準拠するためです。
テクノロジー互換性キット。 http://jcp.org/en/resources/tdk –
テールコールの最適化は、Javaではまだサポートされていません。 John Roseはこれを将来のリリースに組み込む努力をリードしており、approach, and some of the issuesが関わっていると述べています。
私はJava6(実験的な機能)のオプションについて覚えています。おそらく、Sun JDKは実験的なものとしてサポートしていますか? "Da vinchi VM"についてTCOをサポートすべきだと聞きました! –
はい、da Vinciプロジェクトは、他の言語のサポートに対応しており、サポートがプロトタイプ化されています。 – erickson
この最適化のいくつかの並べ替え(tail-recursionのみ)はIBM JVMでサポートされています(メソッドの先頭に戻るようなもの) –
JVMの別の違いは、文書化されていないAPIの動作です。 (例:com.sun.xxx) たとえば、SunのJVMとIBMのJVMの両方で、信号処理に関する動作が少し異なります。 (IBMのJVMではアプリケーションが「INT」信号をトラップすることができない場合があります)。
JVMは、クラスとBytcodeのバリエータをロードしてコードを実行する仮想マシンのようなものです。 Applocaion Programming Interfaceはパッケージのコレクションです。パッケージはクラスのコレクションです。 Javaプログラムは、JVMがインストールされ、動作する場所で実行されます。
5年以上前からJRockitを使用していた人がいるので、全体的にはホットスポットより速いとは言えませんが、確かに堅牢ではありません。彼らはスピードのために信頼性を犠牲にし、何もせずに終わる。 – erickson
@erickson、JRockitを自主的に5年以上使用してきた人として、あなたの経験は普遍的ではないと言えるでしょう。 JRockitはメモリリーク検出ツールでも少なくとも1回は保存しています。 :)私はSun VMsよりも、それ以上のクラッシュはありませんでした(ただし、1つまたは2つありました)。 – jsight