有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java继承是否会影响应用程序的性能?

我想知道是否可以通过使用更多的超类来提高应用程序的性能。我的问题是关于Kotlin的,但我认为Java的答案是一样的


假设您有这个继承模式(右边的类是左边类的子类):
A<;B<;C<;D<;E<;F<;G<。。。依此类推,直到Z。

表示您不需要所有子类中定义的所有内容,只需要类的属性和函数。出于一个模糊的原因,您的代码只使用Z类

我的问题很简单:如果您将代码更改为只使用类而不是Z类,那么代码的性能会更好吗

提前感谢您的回答


共 (2) 个答案

  1. # 1 楼答案

    如果

    "change your code to only use A class instead of Z class"

    包括构造,然后有一个简单的答案:

    在内存和初始化时间方面,创建和存储属性/字段较少的对象比创建属性较多的对象便宜

    除此之外,我不希望对绩效产生重大影响


    也就是说,我不担心这里的性能——选择一种类型,它可以为你想用它做的事情提供最好的抽象。如果您的代码不关心您使用的是什么特定的子类,也不需要子类提供的任何功能,请使用更通用的类型。这样你的代码就更灵活了。然而,如果你的代码在某个时候需要这样的功能,也就是说,你必须进一步引入强制类型转换,那么你已经走得太远了

  2. # 2 楼答案

    答案是肯定的。 例如,如果调用方法z.someMethod()。热点将首先在Z类中查找该方法。如果HotSpot没有找到目标方法,它将在Z的父级中查找该方法。然后继续这些步骤,直到找到目标方法。因此,如果继承链很长,查找方法将需要更多时间

    然而,HotSpot使用一些缓存来加速这个过程

    HotSpot VirtualCalls