问题
by an high-performance point of view, calling an outer class static
method is slower than calling a static
method in the same class?
回答1:
No, never. Leaving method visibility apart, static method are just global function in the C sense. So it can't matter, what class they belong to, not even on Android.
回答2:
It depends. Consider the following:
public class Outer {
/*private*/ static void outerMethod() {
// do stuff
}
static class Inner {
public void doStuff() {
outerMethod();
}
}
}
The doStuff()
method's bytecode looks like this:
0: invokestatic #2 // Method Outer.outerMethod:()V
3: return
But if we make outerMethod()
private, the code will look like this instead:
0: invokestatic #2 // Method Outer.access$000:()V
3: return
The problem is that the inner class can't directly call the outer class method, because it's private. The compiler works around this by creating a synthetic access$000()
method, which does nothing but call outerMethod()
. Calling through the accessor method is slower unless the AOT or JIT compiler recognizes the pattern and optimizes it out.
So, calling an outer-class static method could be slower if it's also declared private.
来源:https://stackoverflow.com/questions/24210531/android-java-performance-invoking-static-method-from-self-class-or-outer-class