2012年6月14日木曜日

Javaのメモリ領域

Javaでは、以下の3つのメモリ空間が存在する。
パーマネント領域
ヒープ領域
スタック領域

まず、パーマネント領域。
これは、クラス情報や、staticな情報を格納する領域。
JVMがクラスをロードする際に、クラス情報をここの領域に展開する。

次にヒープ領域。
これは、パーマネント領域のクラス情報を元に作られたインスタンスのデータが格納される。

最後にスタック領域。
ここには、ローカル変数のデータや、メソッド呼び出しの際に、呼び出し側の番地のデータが格納される。
例えば、レシーバオブジェクト(呼び出された方のオブジェクト)のメソッドがreturnする際に、スタックに保持しておいた呼び出し側の番地を参照して、呼び出し側のコードに戻る。

ちなみに、オブジェクトにあたるデータは言語によって異なる。
定義としては、クラス情報を元に生成されたインスタンス=オブジェクト。

例えば、JVM上にロードされたクラス情報はオブジェクトではないが、インスタンスはオブジェクトである。
また、Objective-Cでは、クラスをロードすると、Classクラスのインスタンスが生成されるので、これはオブジェクトと呼べる。

0 件のコメント:

コメントを投稿