JVMの役割のために私は混乱しています。 JVMがバイトコードをMachineコードに変換するだけであるという私の理解は正しいですか?したがって、本質的にOS、JVM、およびCPUの間に通信があります。私の前提は、バイトコードがマシンコードに変換され、CPUによって処理されるということです。バイトコードをマシンコードに変換する必要がありますか?
答えて
JVM
は仮想マシンです。
VMwareやVirtualBoxにいくつかのOS(Linux、Solaris)をインストールしたときのように、それらは仮想マシンです。それらはホストOSの上で動作します。
JVM
は、マシンコードがbytecode
のように異なります。マシンコードとして高水準の言語を持つマシンがあります。 JVMがホストOS上ではなくハードウェア上で実行される場合、bytecode
命令セットを使用できるハードウェアが必要です。
しかし、ホストOS上で実行されるため、バイトコード命令はマシンコードに変換された後でホストに伝達されます。 VMware/VirtualBoxの場合は、これらのソフトウェアが処理します。 JVMの場合はJRE
で終了します。
すべてのバイトコード命令はマシンコードに変換されますか?その後、OSに、そしてOSにCPUに伝えられましたか? – manojpotla
しかし、JVMはそれに参加しません。ラッパー環境、この場合はJREによって実行されなければなりません。バッチファイルまたはシェルスクリプトを実行していると考えると、バッチファイル内のすべての命令は、バイトコードの命令と同等の命令です。しかし、インタプリタは、バッチファイルの各命令に従って実行する適切なプログラムを見つける必要があります。 – 11thdimension
JAVAは、翻訳された言語であり、解釈された言語ではありません。そのプログラムの段階的な実行を見てみましょう。
- javaプログラムを作成し、ハードディスクのどこかのフォルダに "hello.java"として保存するとします。
- Javaコンパイラの名前は「javac」です。コンパイルのために、コマンドラインに "javac hello.java"と書かなければなりません。
- この段階で、ハイレベルコードがマシンレベルコードに変換されます。 Javaはそれを "hello.class"として.classファイルに変換します。このファイルのすべての命令が1バイトであるため、このコードはバイトコードとも呼ばれます。
- このバイトコードは、 Mac、LinuxまたはWindowsのような他のプラットフォームでも取り除くことができます。 実行のためには、それぞれのOSのJVMしかかかりません。したがって、JAVAは独立した第1のプラットフォームとして知られており、アーキテクチャ的に中立な言語である です。
- 現在、実行のためにインタープリタが使用されています。それは「Java」自体の名前です。その解釈のために、 "java hello.java"をコマンドラインで使用する必要があります。内部的には、ハードディスクからJVMのアドレス空間への 'hello.class'ファイルのロードを担当するクラスローダーを呼び出します。
- ランタイムエラーを回避するためにコードを検証する 'バイトコードベリファイア'があります。検証に成功すると、JVMはOSの助けを借りてバイトコードを実行します。
したがって、Javaプログラム全体がJVMおよびOSによって実行されます。 JVMはJavaプログラムのミニOSとして動作し、命令がそのスコープ内にない場合にのみOSに関係します。
- 1. LIBSVMフォーマットに変換する必要がありますか?
- 2. スパークはバイトコードをマシンコード命令の実行時変換にどのように変換しますか?
- 3. WinFormをWebFormに変換する必要があります
- 4. SQLをLINQに変換する必要があります
- 5. これをC++に変換する必要があります
- 6. EMFをjpegに変換する必要があります。
- 7. JAVA - swt、各OSのバイトコードをリメイクする必要がありますか?
- 8. ウェーブファイルに変換する必要があります
- 9. 各ファイルをhamlからhtmlに変換する必要がありますか?
- 10. ビューのnil属性をto_sに変換する必要がありますか
- 11. JSONツリーにMySQLのレコードを変換する必要があり
- 12. 私はASCII文字列に変換する必要がある文字列を、どのように変換する必要がありますか?
- 13. LLVMバイトコードをJavaバイトコードに変換できますか?
- 14. .mp4ビデオを.flvまたは.fv4に変換する必要があります
- 15. コントローラーを不変にする必要がありますか?
- 16. Spark変換とアクションのロジックはスレッドセーフである必要がありますか?
- 17. "control name"はSystem.Web.UI.Pageに変換可能である必要があります
- 18. イメージファイルをX座標に変換する必要があります
- 19. 生のSQLを雄弁なクエリービルダーに変換する必要があります
- 20. OpenCVはIPL_DEPTH_32SをIPL_DEPTH_32Fに変換する必要があります
- 21. exeファイルをJARファイルに変換する必要があります
- 22. 複雑なオブジェクトを.NETのXmlに変換する必要があります。#
- 23. 次のコードをjsonに変換する必要があります
- 24. Oracle関数をC#コードに変換する必要があります
- 25. NSDateオブジェクトをUDateオブジェクト(ICU)に変換する必要があります
- 26. pngファイルを1つのpdfファイルに変換する必要があります
- 27. jqueryの配列値をjsonに変換する必要があります
- 28. C#のハッシュ関数をPHPに変換する必要があります
- 29. ロジックがあるときに、バッキングフィールドを持つプロパティに変換する必要がありますか?
- 30. プログラムカウンタは常に変更する必要がありますか?
私はあなたが読むことをお勧めします:https://en.wikipedia.org/wiki/Java_virtual_machine – PSo