继承会影响应用程序的性能吗?

时间:2019-01-25 09:43:55

标签: java performance inheritance kotlin jvm

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


假设您具有此继承架构(右侧的类是其左侧的类的子类):
A

说,您不需要所有子类中定义的所有东西,而只需要A类的属性和功能。由于晦涩的原因,您的代码仅使用Z类。

我的问题很简单:如果您将代码更改为仅使用A类而不是Z类,那么代码会更高效吗?

预先感谢您的回答。

2 个答案:

答案 0 :(得分:2)

如果

  

“将代码更改为仅使用A类而不是Z类”

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

创建和存储具有较少属性/字段的对象要比创建具有更多属性的对象便宜,无论是在内存还是初始化时间上。

除此之外,我预计不会对性能产生重大影响。


也就是说,我不会在这里担心性能-选择可以为您的工作提供最佳抽象的类型。如果您的代码不关心您正在使用的特定子类,并且不需要这些子类提供的任何功能,请使用更通用的类型。这样,您的代码将更加灵活。但是,如果您的代码在某个时候需要这种功能,即您必须在后面进一步引入强制转换,那么您就太过分了。

答案 1 :(得分:1)

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

但是,HotSpot使用某些缓存来加速该过程。

HotSpot VirtualCalls