2011-02-07 7 views
3

私のJavaの知識はあまり良くありません。これは「言語」だけでなく、仮想マシンも意味します。Java言語の仕組み

ここは私の理解です。

  1. JavaコンパイラはコードをJavaバイトコードに変換します。ファイルが実行されると、.javaファイル
  2. の形式で、JVMはバイトコードを読み込んでマシンコードに変換します。
  3. コンピュータがマシンコードを読み取り、プログラムがコンパイルされたプログラムのように実行されているように見えます(ユーザーに表示されます)。

これは間違っていますか?

+1

Javaバイトコードファイルは '.class'ファイル...' .java'がソースファイルです。 – ColinD

+0

( 's/\。java/\。class /'を使って)右に聞こえますが、これは全体の質問ですか? – delnan

+0

絶望的ではない、多かれ少なかれ大丈夫です。 JVMは単純なバイトコードの読み取り/マシンコードへの変換よりも複雑です。必要に応じて、最適化、プロファイル、およびコード修正をオンザフライで行います。 – bestsss

答えて

3

は、すでに多くの答えがありますが、私は一つの重要なポイント不足しています:ファイルが実行されたときに

「2.、JVMが(ジャストインタイムで)読み込むバイトコードとターンをそれを機械コードに変換します。「

これは非常に正しいではありません。

  • JVMは、それは部品、ホットスポット
  • それ分析を最も時間のかかるを見コード
  • を解釈ことから始まりますトレース、すなわち典型的な実行フロー
  • これは、チャコードは、コードの短い時間のかかる部分は解釈利用可能なホットスポット及びトレース

のために最適化。状況が変化した場合(例えば、新しいクラスをロードすることによって)、コンパイルされたコードの中には、最適でないものや不正確なものが表示されることがあります。また、JVMは解釈をしばらく戻した後、 。あなたはJavaクラスを作成する場合

0

ご理解の方が正しいです。私は適応HotSpotコンパイラ

    1. の下を追加したいJavaは 最適化マシン命令
  • 2

    A Java仮想マシン(JVM)がコンパイルされ解釈ソフトウェア、あるにバイトコードにコンパイルJavaバイトコードとjavaプログラムを実行します。 Java仮想マシン言語は、概念的には、スタック指向の能力アーキテクチャの命令セットを表す。

    Java Virtual Machineには、プログラミング言語に関する情報はありません。 JVMはバイナリバイトコード形式のみを認識します。プログラマは、いずれかのプログラミング言語でこのフォーマットに従うバイトコードを生成することができます。すべてのJavaプログラムは、Java仮想マシンによって定義された境界内で実行されます。

    JVM内で実行されるJavaのコードは、Java仮想マシンによって定義されたセキュリティ制約を超えることはできません。 Javaアプリケーションは、このソフトウェアのためにインターネット上の安全なアプリケーションとみなされます。

    0

    ほとんど:

    • Javaコンパイラは.classファイルは、バイトコードを含む.javaファイルを、ファイルではなく作成されます。 .javaファイルにはソースコードが含まれています。
    • JVM(Java仮想マシン)は、単独の(仮想)コンピュータに似ています。バイトコードを解釈します。 OSはJVMのみを実行します。
    • コンパイラはパフォーマンス上の理由からコードの一部をマシンコードにコンパイルすることができます。その場合、JVMはそのコードの実行をOSに委譲します(私は推測します)。
    0

    正確には、

    • 、拡張子がコンパイル中の.java

    • だろう、コンパイラが の.classにコード(た.javaファイル)に変換します(バイトコード)。

    • コードが実行されると、JVMはバイトコード(.classファイル)を に変換します。OSによって解釈されるマシンコード。これにより、プラットフォームに依存しないプラットフォームとしてはJavaが、プラットフォームに依存するとしてはJVMが になります。