繁体   English   中英

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

[英]Do methods in class instances take a place in memory?

当我有这样的课程时:

class Test {
    private int _id  = 0 ; // 4 bytes
    private int _age = 0 ; // 4 bytes
}

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

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

它是如何工作的?

谢谢。

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

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


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

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

但是为了执行像instance.method()这样的方法,该方法的本地副本将在每个实例的堆栈中进行,其中实例将在堆中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM