![](/img/trans.png)
[英]Do Static Methods and Fields take up memory in an instance of the class they are defined in?
[英]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.