哪种设计消耗更少的内存?

时间:2016-01-21 19:46:30

标签: java memory

如果我有一个interface In1和两个c1,c2类来实现In1
如果我有两个类x1,x2只有自己的方法,其中的行为方式与c1,c2 相同:

In1  i1 = new c1();
i1 = new c2();

X1 x1 = new x1();
X2 x2 = new x2();

以上哪项消耗更多内存

1 个答案:

答案 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中声明的方法。