通过一个角度高性能点,调用一个外部类static
方法比调用较慢static
中同一类的方法?
Answer 1:
没有永不。 保留方法知名度分开,静态方法在C意义上只是全局函数。 因此,它不能不管,他们属于什么类,甚至没有在Android上。
Answer 2:
这取决于。 考虑以下:
public class Outer {
/*private*/ static void outerMethod() {
// do stuff
}
static class Inner {
public void doStuff() {
outerMethod();
}
}
}
该doStuff()
方法的字节码如下:
0: invokestatic #2 // Method Outer.outerMethod:()V
3: return
但是,如果我们让outerMethod()
私人,代码看起来像这个:
0: invokestatic #2 // Method Outer.access$000:()V
3: return
问题是,内部类不能直接调用外部类的方法,因为它是私有的。 编译器创建一个合成的解决了这个问题access$000()
方法,它不只是调用outerMethod()
通过存取器方法调用慢,除非AOT或JIT编译器可识别图案,并优化它。
所以,调用外部类的静态方法可能会比较慢,如果它也声明为private。
文章来源: Android java performance: invoking static method from self class or outer class