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: return
But if we make outerMethod()
private, the code will look like this instead:
0: invokestatic #2// Method Outer.access$000:()V3: 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.
Post a Comment for "Android Java Performance: Invoking Static Method From Self Class Or Outer Class"