Java接口的性能开销超过抽象类

时间:2014-04-16 21:20:27

标签: java performance benchmarking

在我的测试中,在Java中定义的接口上调用函数比使用扩展抽象类(在我的macbook上)执行大约需要200纳秒。这是预期的开销吗?

2 个答案:

答案 0 :(得分:0)

我不太了解Java实现的细节。但是,根据我使用不同语言的编译器的经验,我认为由于一个类只能扩展一个抽象类但可以实现多个接口,因此搜索正确方法的过程可能需要稍长一些时间,因为支持动态调度所需的数据结构中的一些额外复杂性。所以这个结果并不让我感到惊讶。

答案 1 :(得分:0)

我很确定你的基准测试被打破了(因为Java基准测试是pretty hard)。除非你正在运行一些历史CPU,否则开销必须远低于200 ns。

尽管如此,界面有时会稍微慢一些,但事情要复杂得多,正如您在my question中看到的那样。