今回はJavaプログラムの実行過程について書き溜めます。
JavaプログラムはC言語プログラムのの実行過程とは少し異なります。
インスタンスなどがどこに作られるかについても軽く書き溜めます。
Java実行ファイル(.class)の実行過程
C実行ファイル(.EXE)の実行過程
- OSがメモリ空間に「変数領域」、「関数領域」、「スタック領域」、「ヒープ領域」を確保する
- OSにより、プログラムがメモリ上の各領域に展開される
- マシン語が逐次実行される
Javaプログラムファイルの場合の実行過程
javaではJVM(java仮想マシン)が存在するため少し異なります。
- JVMがOSのプロセスとして起動する
- JVMがメモリ空間上に、「ヒープ領域」、「スタック領域」を確保する
- 必要に応じて、クラスローダがクラスの情報を「ヒープ領域」に展開する
- JVMがmainメソッドのバイトコードを逐次実行する
Javaはバイトコード(中間コード)であることに注意
Java インスタンスが作られる空間
ヒープとスタック
javaで定義したプログラムは概念によって確保される領域が異なる。
- ヒープ: クラス、インスタンスが格納される領域
- new演算子によって生成されるインスタンスは, 動的にヒープ領域に確保される
- スタック: メソッドが生成される領域
- 各メソッドは、スタックフレームという単位で積み上げられる
- スタックフレームには「ローカル変数」、「メソッド引数」、「呼び出し元への参照」や、計算を行う「オペランドスタック」等が含まれている
ちなみに、プリミティブ型の変数の値はメモリに直接書き込まれるが、
参照型は変数が存在するメモリ空間中のアドレスが書き込まれる。
プリミティブ型(基本型)と参照型については、過去記事(基本型と参照型)をどうぞ。
Java プログラムの実行過程とメモリ空間がわかったと思う。
しっかり基礎を抑えておきたい。
じゃあね〜〜〜〜。