1

一个对象存在于堆上。它由实例变量组成。它是否也包含方法,当我们从对象调用方法时,它如何进入堆栈?

如果我创建一个对象

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

方法代码在哪里?它是在堆内存中的对象中还是在其他地方?

4

3 回答 3

2

方法代码不在堆中 - 它位于加载类数据时填充的静态内存区域。对象实例包含对该静态内存区域的引用,它允许运行时系统在调用时查找适当的方法——这就是方法覆盖的工作方式。假设你正在调用一个实例的equals方法——在运行时,JVM 会查看类的静态内存区域,然后找到被覆盖equals方法的地址,或者它遵循指向超类静态内存区域的链接以找到它的equals方法,当 JVM 找到被覆盖的方法时停止,equals或者当 JVMObject使用其默认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 回答