Abstract Class和Interface

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

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

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



作者: Cherami
原载: Abstract Class和Interface
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

日志评价

1 Star2 Stars3 Stars4 Stars5 Stars (暂无评价) --点击星星直接投票
Loading ... Loading ...


相关日志



随机日志



添加到网摘

[del.icio.us]  [新浪 VIVI]  [365key]  [YouNote]  [博采中心]  [Poco]  [SOHU狐摘]  [天极网摘]  [和讯网摘]
喜欢这个插件?

当前日志信息