2009-09-05 3 views
19

私たちはハードウェアでJavaインタプリタを実装すると、Javaバイトコードのアーキテクチャの中立性をどのように達成できますか? JavaはJIT(ちょうどタイムインタプリタ)を使用しますか?ハードウェアで とどのようにこのすべては、オペレーティングシステムの仮想マシンの概念に関連して、Java仮想マシン(JVM)JVMの実装Javaバイトコードをネイティブで実行するハードウェアでJavaインタプリタを実装できますか?

+1

実装リスト:https://en.wikipedia.org/wiki/Java_processor –

答えて

10

Javaシステムのいくつかのハードウェア実装(バイトコードを実行できるCPU)はすでにありますが、主流にはなっていません。これは、ソフトウェアの実装がCPUの高速化と高速化に対応しているか、またはそれ以上の性能を発揮している可能性が高いためです。

もっと深く掘り下げて調べると、JVM実装の詳細はそれほど重要ではなく(かなり変化があります)、すべてJVM - Javaバイトコードのマシン言語を実行します。 Javaの世界にとどまり、 "ネイティブ"なものでリンクしていない場合は、あなたが選んだ実装によらなければなりません。

この会社は、Javaプログラム用にチューニングサーバ・システムを提供する生活になり、彼らはあなたが興味がありますhttp://www.azulsystems.com/

+0

簡単な質問ですが、jvmのソフトウェアバージョンを実行するためにデバイスが必要とする設定はありますか? – inquisitive

+1

@Inquisitive誰かがそのデバイス用のJVMを用意しておく必要があります。設定は、JVMの要件を満たさなければなりません。 –

+1

ここで2017年にCPUの高速化と高速化が止まった。その代わりに、ソフトウェアJVMは、JITが重要な場所できわめて最適化されたマシンコードを作成するために使用できるプロファイリング情報を保持するために、より多くのメモリを使用します。ハードウェアの実装には通常そのオプションがありませんので、最適化できません。同一のハードウェアがあれば、ソフトウェアソリューションが勝利します。 –

3
  • さは、マネージコードを実行していることの利点を無視します。他のネイティブコードとはどのような違いがありますか。そして、プラットフォームの中立性も妨げられています。それにかかわらず、そのような実装があり、プロセッサとARMのJazelleのAJileシリーズをチェックしてください。これらは組み込みプラットフォームを対象としています。
  • SunのコンパイラであるHotSpotはJITを使用します。私は個人的に他者を使用していませんが、高度に使用される技術でなければなりません。
  • JVMは、特定のプラットフォーム(Javaバイトコード)のみを対象とした、限定リソースVMと考えることができます。
+0

これは、Javaの仮想化を意味します(または、jreと呼ぶことができますか?)は、オペレーティングシステムの仮想化とは異なります... 私は正しいですか? – paragjain

+0

私が理解したように、仮想化はソフトウェアを使ったハードウェアのシミュレーションです。ゲストアプリケーション(Javaアプリケーションまたはオペレーティングシステム)は、VMを別のコンピュータとして認識し、ネイティブコードを使用してVMと対話します。一方、VMはネイティブのマシンコードを理解し、アプリケーションが要求していることを解釈し、必要な権限とアクセス許可があれば、アクション自体を実行します。 この定義では、javaアプリケーションまたはOSの仮想化は似ています。ゲストに提供される操作の範囲と、異なるVMの能力です。 – Chintan

+0

仮想化は、完全な物理マシンを別の物理マシン上で動作するプログラムに変更することを指します。 –

6

はい、できます。これは仕様段階に固執している(または放棄された)ようですが、picoJavaはJavaバイトコードのネイティブ実行を可能にします。 picoJava has a port available on a FPGA。 ARMプロセッサには、Jazelleもあります。

ハードウェアがバイトコードを直接実行すると仮定すると、すべての最適化もハードウェアで行う必要があります。プロセッサはバイトコードを直接実行するため、JITは必要ありません。すべてのハードウェア実装は、Java Virtual Machine Specificationで定義されているJVMモデルを実装する必要があります。実行可能な最適化は、命令パイプライニング、キャッシュの使用などのハードウェア最適化のライン上にある。

ハードウェア実装で実行されるバイトコードはソフトウェア実装で引き続き動作するため、ハードウェアの中立性は失われない。よくJavaをハードウェアに依存しないようにするのは、バイトコードの標準です。

+0

「ハードウェアの中立性は失われません。ハードウェア実装で実行されるバイトコードは、ソフトウェア実装でも引き続き動作するため、Javaをハードウェアに中立にするバイトコードの標準です。 –

6

をはい、いくつかのハードウェアのJava実装があります。しかし、より汎用的なシリコン上で実行されるソフトウェアよりも常に優れた性能を発揮するわけではありません。

Mark Lamがこのトピックにseveral interesting blogs entriesと書いています。

+0

根底にある問題の1つは、ソフトウェアの最適化を「パッチ適用」することができることです。ハードウェアではできません。 –

+1

実行がハードウェアで行われたとしても、ハードウェアJVMが望む最適化を行うことを妨げるものはありません。マシンにはRAMとすべてがあります。 –

+4

実際、ハードウェアよりもソフトウェアが文字通り高速ではありません。ハードウェアの速度が遅い場合は、開発が遅れていることを意味します。たとえば、Hotspot JITがJavaのハードウェア実装よりも高速な場合、Hotspot JITをハードウェアに移動するだけで済みます。ハードウェアへの移行は、既存のものより確実に速くなります。しかし、いずれにしても、JITがハードウェアでJVMを実装する最速の方法であるかどうかは疑問です。 @Vineet:1.ソフトウェアで行うことができるものは、ハードウェアで行うことができます。 2. x86はハードウェアレベルで厳密な最適化を行います。 –

関連する問題