Ich habe gerade versucht, ein relativ einfaches Java-Programm mit jvisualvm zu profilieren. Die Ergebnisse waren etwas seltsam: Eine kleine 4-Linien-Methode hat die meiste Eigenzeit, deutlich mehr als jede andere Methode!Seltsame Profiler-Ergebnisse
public class Hub
public void clock() {
for (int i = 0; i < cogs.length; i++) {
cogs[i].clock(cnt, i, this);
}
cnt++;
}
}
Hinweis: cogs.length ist 8 in diesem Fall!
Das ist seltsam, da die Cog.clock-Methode erheblich größer ist! Die einzige plausible Erklärung, die ich tun konnte, ist die Tatsache, dass die meisten (in diesem Fall 6 von 8) Cog Objekte in einem „gestoppt“ Zustand sein wird, die sich wie gefangen ist:
public class Cog
public void clock(int cnt, int cogid, Hub hub) {
if (state == State.STOP)
return;
//long code goes here
}
}
Aber das shouldn‘ Ich habe SO große Wirkung! Hier ist ein Bild von Beweis:
Wie oft rufen Sie 'clock()'? Wo ist der Rest des Codes? –
Ich bearbeitet, um den Unterschied zwischen Hub.clock und Cog.clock zu klären. Im Grunde wird Hub.clock in einer Endlosschleife aufgerufen, und das ruft dann die Uhr für alle Cog-Objekte auf. –
Ich würde dem Profiler nicht viel vertrauen. Die Messung beeinflusst die Ausführung und hat viele Probleme. Wenn die Gesamtlaufzeit wirklich nur 10 ms beträgt, dann können Sie es vergessen; Die JVM benötigt mehr, um alles richtig zu optimieren. Wenn Sie keine Geschwindigkeitsprobleme haben, dann können Sie es einfach ignorieren (dachte ich bin auch neugierig, was genau hier los ist). Andernfalls führen Sie eine längere Messung durch und veröffentlichen Sie die Ergebnisse. – maaartinus