类实例中的方法是否在内存中占有一席之地?

Rea*_*cen 14 java

当我有这样的课程时:

class Test {
    private int _id  = 0 ; // 4 bytes
    private int _age = 0 ; // 4 bytes
}
Run Code Online (Sandbox Code Playgroud)

我确信它的每个实例在内存中消耗超过8个字节,因为它有2个整数.

但是方法怎么样?如果我有一个拥有一百万个方法的类,以及它的两个实例,这些方法会占用内存的两倍吗?

它是如何工作的?

谢谢.

Jon*_*eet 20

不可以.方法只在内存1中出现一次.它们不会每个实例而异,因此它们不需要基于每个实例进行存储.

Java中的对象基本上由一些固定大小的"内务处理"(指向类型信息的指针,包括vtable),可能与GC相关的位(思考标记和扫描),有关实例的监视器的信息等 - 然后是领域.


1这有点简化.可能有各种表示形式,例如字节码,本机代码等 - 但这与单独的实例无关.


Hen*_*son 7

具有相同类的两个实例不会复制方法代码所需的空间量.也就是说,这些方法驻留在内存中的一个位置,然后该类的每个实例都有一个指向内存中该位置的指针.这是因为否则会浪费内存.无论类的哪个实例调用它,每个方法需要执行的代码都是相同的,因此复制它是没有意义的.