jvisualvmを使用して相対的な単純なJavaプログラムをプロファイリングしようとしました。結果はやや奇妙でした:小さな4行の方法は、他の方法よりも大幅に多くの自己時間を持っています!奇妙なプロファイラの結果
public class Hub
public void clock() {
for (int i = 0; i < cogs.length; i++) {
cogs[i].clock(cnt, i, this);
}
cnt++;
}
}
注:この場合、cogs.lengthは8です。
これは、Cog.clockメソッドがかなり大きいので、これは奇妙です!
public class Cog
public void clock(int cnt, int cogid, Hub hub) {
if (state == State.STOP)
return;
//long code goes here
}
}
しかし、それshouldn」:私が思い付くことができる唯一のもっともらしい説明は、(この場合は8の6中)最もコグオブジェクトは、次のようにcatchedされる「停止」状態であるという事実でありますそれは大きな影響を与えます!ここでは証拠の絵がある:それは楽器(修正)それをするので
'clock()'を何回呼び出していますか?残りのコードはどこにありますか? –
Hub.clockとCog.clockの違いを明確にするために編集しました。基本的に、Hub.clockは無限ループで呼び出され、すべてのCogオブジェクトでclockを呼び出します。 –
私は多くのプロファイラを信頼しません。測定は実行に影響し、多くの問題があります。ランタイムの合計が実際にわずか10ミリ秒であれば、それを忘れることができます。 JVMはすべてを適切に最適化するためにより多くのものを必要とします。あなたがスピードの問題に遭遇しなければ、あなたはそれを無視することができます(私はまた、ここで何が起こっているのかが不思議です)。それ以外の場合は、測定時間を長くして結果を送信してください。 – maaartinus