31

インタープリター、コンパイラー、および仮想マシン (VM) について質問があります。

インタープリターとコンパイラーの違いはわかりましたが、仮想マシンは前の 2つと何が違うのでしょうか? インタープリターとコンパイラーに対する VM の長所と短所は何ですか?

どうもありがとう。

4

3 に答える 3

36

仮想マシンは、コンパイラやインタープリターに代わるものではありません。いくつの VM が実装されているかという JIT コンパイラーについて考えていると思います。

仮想マシン自体はその名の通り、実際には存在しないマシン (プロセッサ) です。たとえば、ほとんどのプロセッサには、メモリ割り当てを処理する固有の方法や、型に関する知識がありません。ただし、Java VM にはnew、特定のクラスのインスタンスを割り当てる命令があります。VM の設計者は、これが VM の操作の基本単位である独自のオペコードに値する言語の重要な概念であると判断しました。

独自の命令セットを作成する利点は、一般に、長いコンパイル/最適化時間と遅いインタープリターの間のギャップを埋めることです。たとえば、Java クラスをコンパイルする場合、レジスタの割り当てやインライン化など、従来のコンパイラの処理を行う必要はありません。JIT は後でそれを行いますが、十分な回数実行し、プログラムの実行全体に広がるコードの部分に対してのみです。JVM の命令セットは Java に十分近いため、最初のコンパイルは迅速であり、Java ソース コードとは異なり、VM の読み取りは単純で迅速です。

インタープリターと JIT コンパイラーのトレードオフは、通常、ランタイム パフォーマンスと開発時間の関係にあります。JIT は開発に時間がかかりますが、実行中のインタープリターは非常に遅くなります。ただし、スクリプトや小規模から中規模の Web サイトなど、多くの場合、プログラムは、JIT を使用する利点を実際に確認するのに十分な時間実行されません。

VMware のようなソフトウェアについても言及する必要があります。これも仮想マシンですが、実際のハードウェアでも使用される命令セットを使用しています。物理的に存在しないマシンのふりをするという点で、言語 VM と同じ基本概念ですが、実際には異なり、非常に複雑です。

于 2013-02-03T22:55:09.257 に答える
24

分かりやすい英語

コンパイラは、ある言語を別の言語に変換します。たとえば、C#をILに、Javaをバイトコードに、C++をバイナリマシンコードに。コンパイル段階では実行は行われません。

インタプリタは、ソースファイルから一度に1行を解釈(実行)します。PHP、Perl、その他のスクリプト言語など

仮想マシンはいくつかのことを参照できますが、私が知っている2つは次のとおりです。

  • Hyper-VXenなどのハイパーバイザー関連の仮想マシン。これらにより、単一のハードウェアで複数のOSを実行できます
  • Java仮想マシン共通言語ランタイムなどのソフトウェアランタイム。このソフトウェアを使用すると、プラットフォームに依存しない中間言語(ILコード、バイトコード)を実行し、マシン固有の命令(ジャストインタイムコンパイル)を実行できます。通常、このようなVMは、リソース管理、メモリクリーンアップ、スレッド化、セキュリティなど、他の衛星タスクを担当します。

長所と短所はありません。3つすべてがほとんど比較できない異なる仕事をします。

言語とプラットフォームは特定の順序ではなく、文字通り何百もの他のサンプルがあります

于 2013-02-03T22:48:54.973 に答える
6

実マシン vs 仮想マシン

  • 実機とは、機械語がハードウェアによって実行される機械のことです。
  • 仮想マシンは、「マシンコード」がインタープリターによって実行されるマシンです。

インタープリターとコンパイラー

答えはこちら

于 2014-05-04T12:58:22.133 に答える