メソッドの変数はスタックに格納され、クラス変数はヒープに格納されることを理解しています。では、作成したクラスとオブジェクトはJavaのどこに格納されますか?
8 に答える
Javaのすべてのオブジェクトはヒープに格納されます。それらへの参照を保持する「変数」は、スタック上にある場合もあれば、他のオブジェクトに含まれている場合もあり(実際には変数ではなくフィールドです)、ヒープにも配置されます。
クラスを定義するClassオブジェクトは、ヒープオブジェクトでもあります。これらには、クラスを構成するバイトコード(クラスファイルからロードされる)と、そこから計算されるメタデータが含まれています。
メモリのスタックセクションには、メソッド、ローカル変数、および参照変数が含まれています。
ヒープセクションにはオブジェクトが含まれます(参照変数も含まれる場合があります)。
短いグーグルの後、私はそれを説明するためのリンクを見つけました、はい、ユーチューブのビデオリンク。^ _ ^
JVM仕様によると、
クラスとそれ自体の定数プール、つまり静的変数はMethod Areaに格納されます。ここでクラスとは、フィールド、メソッド、定数の集まりに過ぎません。これらのメソッドは命令の形でメソッド領域に格納され、アドレスで識別できます。
オブジェクトは、ヒープ領域に作成される埋められたクラス テンプレートに他なりませんが、オブジェクト参照はStackに作成されます。
public class Sample{
int field;
static int constant;
public void test(){
int localVariable=10;
Sample samp=new Sample();
}
}
例では、sample.class が Method Area に移動します。つまり、'field'、'constant'、および method 'test' が Method Area に割り当てられます。
実行が開始されると、new Sample()によって作成されたオブジェクトはヒープに移動しますが、「サンプル」はスタックに移動し、ヒープに存在するオブジェクトのアドレスを保持する単なるオブジェクト参照です
詳細については、このリンクを確認してください 。JVM 仕様