2017-09-26 6 views
-5

各オブジェクトにインスタンス変数のコピーがあります。しかし、静的メンバーのように、インスタンスメソッドのコピーは1つしかありません。はいの場合、それはメモリ内のどこにありますか?Javaのインスタンスメソッド

+1

[静的メソッドのJavaメモリモデル](https://stackoverflow.com/questions/28100825/java-memory-model-for-static-methods)の可能な複製 – Progman

+0

各オブジェクトにインスタンス変数のコピーがあり、インスタンスメソッド。静的変数と静的メンバーはクラスごとに1つずつ存在します – SkrewEverything

+0

各オブジェクトにはインスタンス変数の独自のコピーがありますが、静的変数やメソッドのコピーはありません。インスタンスメソッドのコピーは1つしかありませんが、インスタンスメソッドが呼び出されたときに所有オブジェクトの参照がスタックに置かれるため、ランタイムはメソッドが呼び出されたインスタンスを識別できます。 –

答えて

0

しかし、静的メンバーと同様に、 インスタンスメソッドのコピーは1つだけです。

はい、インスタンスの数に関係なく、メソッドが静的であるかどうかに関係なく、すべてのオブジェクトに対して1つのコピーしかありません。

「はい」の場合、メモリにはどこに存在しますか?

ヒープ。

1

メモリ内にインスタンスメソッドのコピーが1つだけあればよい。インスタンスメソッドが呼び出されると、暗黙的にスタックに "this"変数が含まれます。 "this"変数を使用すると、インスタンスメソッドはそれを呼び出したオブジェクトインスタンスのインスタンス変数にアクセスできます。

これらのメソッドを含むクラスは、ガベージコレクションされることが一般的ではないため、通常、長期間ヒープになります。

0

はい。 論理的には、1つのクラスのすべてのインスタンス内のメソッドは、1つのアルゴリズムを共有します。メモリも同様に動作します。各オブジェクトは1つのメソッドアルゴリズムを呼び出し、メソッド呼び出し中に必要な値がスタックに一時的にプッシュされます。

メソッドは、データ構造ではなく、従うべき一連の命令です。特にメモリを割り当てるべきではありません。

メソッド呼び出し命令は、他のアプリケーション命令と同じようにRAMに別々に格納されます。これはJavaメモリ割り当てプロセスの一部ではありません。

関連する問題