Java 方法的内存开销是多少?
类中函数的内存开销是多少?
例如
Class A
{
int a
}
Class B
{
int a
int foo(int);
}
因此,类 A 的 100 个实例应为 80 个字节。B 类的 100 个实例呢?
类中函数的内存开销是多少?
例如
Class A
{
int a
}
Class B
{
int a
int foo(int);
}
因此,类 A 的 100 个实例应为 80 个字节。B 类的 100 个实例呢?
开销是...没有。
方法定义和代码地址存储在 Class 对象中,该对象具有一个唯一的实例,对象的每个实例都指向该实例。既然如此,那么无论您是否添加了该方法,每个对象的开销都不算什么。
80 字节,因为方法不包含在对象中。除非你也在谈论“vtable”类型的东西,在这种情况下可能是160字节。
对 160 字节的说明。如果每个对象分配了自己的 vtable(这是一种可能的实现),则 160 将如此。或者(正如注释中指出的那样),更好的方法是每个类一个 vtable,这意味着 80 + 指向 vtable 的指针的大小(可能为 4 或 8 个字节,具体取决于 VM)。所以84或88字节。
这整个事情完全取决于VM分配内存和处理非最终方法的方式。如果不知道特定 VM 是如何实现的,这两个问题都无法正确回答。