1

オブジェクトはヒープ上に存在します。インスタンス変数で構成されています。メソッドも含まれていますか? オブジェクトからメソッドを呼び出すと、どのようにスタックに移動しますか?

オブジェクトを作成する場合

Test obj=new Test();
obj.start();

メソッドコードはどこにありますか? ヒープメモリまたは他の場所のオブジェクトにありますか?

4

3 に答える 3

2

メソッド コードはヒープではなく、クラス データが読み込まれるときにデータが取り込まれるメモリの静的領域にあります。オブジェクト インスタンスには、ランタイム システムが呼び出されたときに適切なメソッドを検索できるようにするこの静的メモリ領域への参照が含まれています。これが、メソッドのオーバーライドのしくみです。インスタンスのequalsメソッドを呼び出しているとします。実行時に JVM はクラスの静的メモリ領域を調べ、オーバーライドされたequalsメソッドのアドレスを見つけるか、スーパークラスの静的メモリ領域へのリンクをたどってそのequalsメソッドを見つけます。 JVMがオーバーライドさequalsれたメソッドを見つけたとき、またはJVMがObjectデフォルトのメソッドでメモリ領域を見つけたときに停止しますequals

于 2013-04-10T18:08:56.203 に答える
1

メソッド コードは、インスタンスごとに複製されるわけではありません。各メソッドは一度だけ保存されます。

于 2013-04-10T18:07:12.217 に答える
0

http://javapapers.com/core-java/java-jvm-memory-types/に見られるように:

(...)メソッド領域は非ヒープ メモリの一部です。クラスごとの構造、メソッドおよびコンストラクターのコードを格納します。クラスごとの構造とは、ランタイム定数と静的フィールドを意味します。

参照:メソッドはどこにありますか? スタックまたはヒープ?

于 2013-04-10T18:06:55.607 に答える