如果我有一个interface In1
和两个c1,c2
类来实现In1
如果我有两个类x1,x2
只有自己的方法,其中的行为方式与c1,c2
相同:
In1 i1 = new c1();
i1 = new c2();
和
X1 x1 = new x1();
X2 x2 = new x2();
以上哪项消耗更多内存?
答案 0 :(得分:4)
假设实现方式相同,那么类实现接口是否会显着改变运行时内存需求。
专门查看您的代码
In1 i1 = new c1();
i1 = new c2();
和
X1 x1 = new x1();
X2 x2 = new x2();
在第一个块中,一旦i1 = new c2()运行,就不再引用c1实例。这使它有资格进行垃圾收集。该代码块与第二个代码块不同,因为第二个代码块维护对两个分配对象的引用。
但是,如果您将第一个代码块重写为
In1 i1a = new c1();
In1 i1b = new c2();
在有或没有接口的情况下,您的内存要求也完全相同,因为您持有对相同持续时间的对象的引用。
<强>更新强>
如果您标记了类 final 的方法,我相信您会因为不需要vtable而略微节省内存分配。在interfaces cannot be marked final中声明的方法。