2017-05-25 6 views
0

JVMの役割のために私は混乱しています。 JVMがバイトコードをMachineコードに変換するだけであるという私の理解は正しいですか?したがって、本質的にOS、JVM、およびCPUの間に通信があります。私の前提は、バイトコードがマシンコードに変換され、CPUによって処理されるということです。バイトコードをマシンコードに変換する必要がありますか?

+0

私はあなたが読むことをお勧めします:https://en.wikipedia.org/wiki/Java_virtual_machine – PSo

答えて

0

JVMは仮想マシンです。

VMwareやVirtualBoxにいくつかのOS(Linux、Solaris)をインストールしたときのように、それらは仮想マシンです。それらはホストOSの上で動作します。

JVMは、マシンコードがbytecodeのように異なります。マシンコードとして高水準の言語を持つマシンがあります。 JVMがホストOS上ではなくハードウェア上で実行される場合、bytecode命令セットを使用できるハードウェアが必要です。

しかし、ホストOS上で実行されるため、バイトコード命令はマシンコードに変換された後でホストに伝達されます。 VMware/VirtualBoxの場合は、これらのソフトウェアが処理します。 JVMの場合はJREで終了します。

+0

すべてのバイトコード命令はマシンコードに変換されますか?その後、OSに、そしてOSにCPUに伝えられましたか? – manojpotla

+0

しかし、JVMはそれに参加しません。ラッパー環境、この場合はJREによって実行されなければなりません。バッチファイルまたはシェルスクリプトを実行していると考えると、バッチファイル内のすべての命令は、バイトコードの命令と同等の命令です。しかし、インタプリタは、バッチファイルの各命令に従って実行する適切なプログラムを見つける必要があります。 – 11thdimension

0

JAVAは、翻訳された言語であり、解釈された言語ではありません。そのプログラムの段階的な実行を見てみましょう。

  1. javaプログラムを作成し、ハードディスクのどこかのフォルダに "hello.java"として保存するとします。
  2. Javaコンパイラの名前は「javac」です。コンパイルのために、コマンドラインに "javac hello.java"と書かなければなりません。
  3. この段階で、ハイレベルコードがマシンレベルコードに変換されます。 Javaはそれを "hello.class"として.classファイルに変換します。このファイルのすべての命令が1バイトであるため、このコードはバイトコードとも呼ばれます。
  4. このバイトコードは、 Mac、LinuxまたはWindowsのような他のプラットフォームでも取り除くことができます。 実行のためには、それぞれのOSのJVMしかかかりません。したがって、JAVAは独立した第1のプラットフォームとして知られており、アーキテクチャ的に中立な言語である です。
  5. 現在、実行のためにインタープリタが使用されています。それは「Java」自体の名前です。その解釈のために、 "java hello.java"をコマンドラインで使用する必要があります。内部的には、ハードディスクからJVMのアドレス空間への 'hello.class'ファイルのロードを担当するクラスローダーを呼び出します。
  6. ランタイムエラーを回避するためにコードを検証する 'バイトコードベリファイア'があります。検証に成功すると、JVMはOSの助けを借りてバイトコードを実行します。

したがって、Javaプログラム全体がJVMおよびOSによって実行されます。 JVMはJavaプログラムのミニOSとして動作し、命令がそのスコープ内にない場合にのみOSに関係します。

関連する問題