Java 实例方法是如何存储的

Java 实例方法是如何存储的,java,memory,Java,Memory,可能重复: 我想知道我是否有java中的对象,它的实例方法是如何存储的?对象是否有指向其实例方法的指针 例如: public class MyObject { private int x; private int y; [..] } 如果我计划在内存中保留大量的MyObjects(例如一棵对象的大树),那么除了x和y的getter之外,如果我定义了一个实例方法来计算总和,这会对内存项产生重大影响吗 我正试图弄清楚是应该添加更多的实例方法,还是应该使用getter和setter在另一个类

可能重复:

我想知道我是否有java中的对象,它的实例方法是如何存储的?对象是否有指向其实例方法的指针

例如:

public class MyObject {
 private int x;
 private int y;
 [..]
}
如果我计划在内存中保留大量的
MyObject
s(例如一棵对象的大树),那么除了x和y的getter之外,如果我定义了一个实例方法来计算总和,这会对内存项产生重大影响吗


我正试图弄清楚是应该添加更多的实例方法,还是应该使用getter和setter在另一个类中进行计算。

它们存储在类中。详细信息请参见。

不,这不会产生重大影响。该方法实际上存储在类定义文件
MyObject.class
中。该方法只有一个实例。它会针对每个实例执行,但只定义一次

每个实例都与一个类相关联

该类定义了所有实例的方法

因此,不需要为每个实例提供指向方法的指针

实例只存储非静态属性的值

如果想知道实例的类,只需使用instance.getClass()


通过使用getClass(),您可以在运行时访问所有方法的列表。

对象的属性需要内存(注意:对于对象,存储的属性是指向真实对象的指针,它位于内存中的其他位置)。方法(代码)不需要额外的内存,因为它们与类一起存储

即:


每个实例使用相同的内存。

对象的实例方法存储在其类对象中(只应存在一个副本),它们不会与每个新实例一起“复制”,而是在引擎盖下,每个实例都包含对驻留在类对象中的方法实现的引用


有关技术说明,请参阅“Java虚拟机内部”一书,特别是“对象表示”一节;它详细说明了对象的每个实例如何在相应的类中引用其方法。请注意,JVM规范中没有这方面的实现细节,它们留给实现者使用-链接的文档提供了几种策略。

所谓“相同的内存”,您的意思是“不仅相同的内存大小,而且实际上相同的内存地址”?@SarathChandra相同的内存大小。如果它是相同的内存地址,那么所有实例都将读/写相同的
myNumber
变量。我想问的是“该类的所有方法以及该类的所有实例的方法都将引用相同的内存位置,因为每个实例没有方法的“副本”。对吗?对。类X的方法是类实例的一部分,其字节码是方法定义的一部分
public class MyClass1 {
  private int myNumber;
}
public class MyClass2 {
  private int myNumber;
  public int MyMethod1() {
  }
  public int MyMethod2() {
  }
  public int MyMethod3() {
  }
  ....
  public int MyMethod1000() {
  }
}