Android Java Performance: Invoking Static Method From Self Class Or Outer Class
Solution 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.
Solution 2:
It depends. Consider the following:
publicclassOuter {
/*private*/staticvoidouterMethod() {
// do stuff
}
staticclassInner {
publicvoiddoStuff() {
outerMethod();
}
}
}
The doStuff() method's bytecode looks like this:
0: invokestatic #2// Method Outer.outerMethod:()V3: returnBut if we make outerMethod() private, the code will look like this instead:
0: invokestatic #2// Method Outer.access$000:()V3: returnThe 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.
Post a Comment for "Android Java Performance: Invoking Static Method From Self Class Or Outer Class"