Java中具有非常深且非常浅的继承树的效率缺点?

时间:2015-02-25 14:43:26

标签: java

我遇到问题的Java问题如下:

具有非常深的继承树有哪些潜在的效率缺点,即一大类类A,B,C等,使得B扩展A,C扩展B,D扩展C等?

具有非常浅的继承树有哪些潜在的效率缺点,即一大类类A,B,C等等,这样所有这些类都扩展了单个类Z.?

我可以看到深度继承树的唯一效率问题是,在调用最深类的构造函数时,可以在深度继承树中多次调用super。此外,如果在每个类中都覆盖了方法签名,则编译器将需要更长的时间来整理或确定覆盖哪个方法。

我可以看到浅层继承树的唯一效率问题是,没有利用继承层次结构的好处。所以扩展一个类的一堆类变得杂乱无章。

我说错了吗?或者我完全错了?还有,我缺少深度和浅层继承的其他效率缺点吗?

1 个答案:

答案 0 :(得分:8)

真正的问题是使用的抽象级别是什么。这是影响开发人员效率的因素,这是99%的案例中最重要的事情。您对代码运行效率所做的任何假设都可能是a)没有太大的区别或b)错误或c)未来版本的JVM过时。

需要担心的最重要的CPU性能是时间复杂度,但更常见的是开发人员效率,从长远来看,这将花费您最多的成本。

  

我可以看到深度继承树的唯一效率问题是,在调用最深类的构造函数时,可以在深度继承树中多次调用super。

JVM支持积极的内联。在合理范围内,你调用super的次数并不重要,特别是如果你不添加没有增加值的方法。

  

此外,如果在每个类中都覆盖了方法签名,编译器将需要更长的时间来整理或确定覆盖哪个方法。

虽然这是事实,但编译器编译代码的时间不太可能很重要。如果你有G extends F extends E extends D extends C extends B extends A,那么你选择的唯一的超级方法就是你添加的方法。即你添加的级别越多,就越需要在每个级别覆盖一个方法。 JIT还可以内联所有这些方法,就好像从性能的角度来看没有调用一样。

  

所以扩展一个类的一堆类变得杂乱无章。

这非常重要。它降低了开发人员的效率和优化代码的能力。即它可能性能较差,因为它更难以优化。