Skip to content Skip to sidebar Skip to footer

Android Java Performance: Invoking Static Method From Self Class Or Outer Class

by an high-performance point of view, calling an outer class static method is slower than calling a static method in the same 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"