これは興味深い質問で、@ misiu_mp分析が好きなので、Android6.0.1を実行しているNexus7で2016年のテストで更新すると思いました。テストコードは次のとおりです。
public void runSpeedTest() {
long startTime;
long[] times = new long[100000];
long[] staticTimes = new long[100000];
for (int i = 0; i < times.length; i++) {
startTime = System.nanoTime();
for (int j = 0; j < 1000; j++) {
emptyMethod();
}
times[i] = (System.nanoTime() - startTime) / 1000;
startTime = System.nanoTime();
for (int j = 0; j < 1000; j++) {
emptyStaticMethod();
}
staticTimes[i] = (System.nanoTime() - startTime) / 1000;
}
int timesSum = 0;
for (int i = 0; i < times.length; i++) { timesSum += times[i]; Log.d("status", "time," + times[i]); sleep(); }
int timesStaticSum = 0;
for (int i = 0; i < times.length; i++) { timesStaticSum += staticTimes[i]; Log.d("status", "statictime," + staticTimes[i]); sleep(); }
sleep();
Log.d("status", "final speed = " + (timesSum / times.length));
Log.d("status", "final static speed = " + (timesStaticSum / times.length));
}
private void sleep() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void emptyMethod() { }
private static void emptyStaticMethod() { }
バッファのsleep()
オーバーフローを防ぐために追加されました。Log.d
私は何度もそれをいじってみましたが、結果は@misiu_mpとかなり一致していました。
10^5 iterations of 1000 calls to an empty static void function: 29ns/call
10^5 iterations of 1000 calls to an empty non-static void function: 34ns/call
静的メソッドの呼び出しは、非静的メソッドの呼び出しよりも常にわずかに高速でしたが、a)Android 2.3.2以降、ギャップが大幅に解消され、b)静的または静的または空のメソッドを呼び出すにはまだコストがかかるようです。いいえ。
ただし、時間のヒストグラムを見ると、興味深いことがわかります。静的であるかどうかに関係なく、呼び出しの大部分は30〜40 nsかかり、データを注意深く見ると、事実上すべて30nsです。

同じコードを空のループで実行すると(メソッド呼び出しをコメントアウト)、平均速度は8nsになりますが、測定時間の約3/4は0nsで、残りは正確に30nsです。
このデータをどのように説明するかはわかりませんが、@misiu_mpの結論がまだ当てはまるかどうかはわかりません。空の静的メソッドと非静的メソッドの違いはごくわずかであり、測定の優位性は正確に30nsです。そうは言っても、空のメソッドを実行するには、まだゼロ以外のコストがかかるように思われます。