Java 方法的内存开销是多少?

2022-09-03 13:59:59

类中函数的内存开销是多少?

例如

Class A
{
 int a
}

Class B
{
 int a
 int foo(int);
}

因此,类 A 的 100 个实例应为 80 个字节。B 类的 100 个实例呢?


答案 1

开销是...没有。

方法定义和代码地址存储在 Class 对象中,该对象具有一个唯一的实例,对象的每个实例都指向该实例。既然如此,那么无论您是否添加了该方法,每个对象的开销都不算什么。


答案 2

80 字节,因为方法不包含在对象中。除非你也在谈论“vtable”类型的东西,在这种情况下可能是160字节。

对 160 字节的说明。如果每个对象分配了自己的 vtable(这是一种可能的实现),则 160 将如此。或者(正如注释中指出的那样),更好的方法是每个类一个 vtable,这意味着 80 + 指向 vtable 的指针的大小(可能为 4 或 8 个字节,具体取决于 VM)。所以84或88字节。

这整个事情完全取决于VM分配内存和处理非最终方法的方式。如果不知道特定 VM 是如何实现的,这两个问题都无法正确回答。