Die Zeit Komplexität des Codes bekannt ist. Das System, auf dem das Programm ausgeführt wurde, ist Intel Corei3, das Dual Core und CPU @ 2.4ghz ist - es hat 4 logische Prozessoren. Mit diesen Details, wie kann die Ausführungszeit des Codes berechnet werden?Mit O (n) bekannt und Systemtakt bekannt, können wir die Ausführungszeit des Codes berechnen
public class PerfmTest {
public static void main(String[] args) {
getexeTime(1000000);
}
public static void getTime (long n) {
// long startTime = System.currentTimeMillis();
long startTime = System.nanoTime();
long k = 0;
for (int i = 1; i <=5; i++) {
// k = k + 5;
}
// long endTime = System.currentTimeMillis();
long estimatedTime = System.nanoTime() - startTime;
//System.out.println("Execution time for n = " + n + " is " + (endTime - startTime) + " milliseconds");
System.out.println("Execution time for n = " + n + " is " + estimatedTime + " nanoseconds");
}
}
Die Ausgabe war 855 Nanosekunden.
Ich vermute, Sie wussten nicht, dass Code ohne beobachtbare Nebenwirkungen zur Kompilierzeit optimiert werden kann. Egal, was ** willst du mit dieser Übung erreichen? –
Ich bin mir bewusst, dass der Code optimiert ist. Aber Punkt ist, wie in der Theorie sein O (n) und wie es mit 2 Doppelkernen funktioniert. Ich arbeite an einem Lehrmittelprojekt. – Uma
In der Theorie ist es nicht O (n), weil der Compiler die Schleife eliminieren kann (du liest nie 'k' nach der Schleife - also gibt es keine Nebenwirkungen, um sie zu entfernen - selbst wenn du die Addition hineinlegst) Theorie). Ihr aktueller Code ist also theoretisch "O (1)". Achte auch auf Mikro-Benchmarks. Es gibt einen JIT, und Kaltläufe unterscheiden sich von Warmläufen (und es kann mehrere Läufe dauern, um JIT auszulösen). –