呵呵,这个问题可能大部分人从来不会想到,这里要说的不是谁好谁坏,也不是设计,而是性能问题。

今天一个同事问我,听说Interface有性能问题,比Abstract Class慢很多,知道怎么回事吗?我以前从来没有听说过,后来google了下,还真的发现有人讨论这个:Interface VS Abstract class

结论是Interface比Abstract Class慢很多,原因是调用Interface方法的指令是invokeinterface,而调用Abstract Class的方法指令是invokevirtual,而在调用invokeinterface时的真正的参数多一个参数指定参数数量,呵呵,这个小小的区别导致两个指令可能有10倍以上的差别。至于详细的区别,大家也可以看这个帖子。另外这个文章说的更加全面,比较了四个invokeXxx指令的性能以及字节码,结论是:静态方法调用最快,而通过接口调用方法最慢(比invokevirtual慢了3-4倍),调用private的方法比调用一般的方法稍快。

(Visited 117 times, 1 visits today)