如何存储实例方法

Sam*_*uel 14 java memory

可能重复:
内存中的Java/C#方法表示

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

例:

public class MyObject {
 private int x;
 private int y;
 [..]
}
Run Code Online (Sandbox Code Playgroud)

如果我计划MyObject在内存中保留很多(例如,对象的一棵大树),如果除了x的getter和yi定义计算总和的实例方法,它会在内存方面产生显着差异吗?

我正在尝试解决问题,我应该添加更多实例方法或使用getter和setter在另一个类中进行计算.

Ósc*_*pez 13

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

有关技术说明,请参阅"Java虚拟机内部"一书中的本章,特别是"对象表示"部分; 它详细说明了对象的每个实例如何在相应的类中引用其方法.请注意,JVM规范中存在此实现细节,并且它们对实现者保持开放 - 链接文档提供了几种策略.


SJu*_*n76 12

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

IE:

public class MyClass1 {
  private int myNumber;
}
Run Code Online (Sandbox Code Playgroud)

public class MyClass2 {
  private int myNumber;
  public int MyMethod1() {
  }
  public int MyMethod2() {
  }
  public int MyMethod3() {
  }
  ....
  public int MyMethod1000() {
  }
}
Run Code Online (Sandbox Code Playgroud)

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


Bas*_*tch 6

它们存储在类中.详细信息在JVM规范中.