2010-11-20 9 views
0

Gibt es einen Unterschied zwischen Methodenaufrufzeit und Methodenausführungszeit? Ich denke, wir können die Ausführungszeit der Methode leicht messen. Aber wie kann ich die Methodenaufrufzeit messen? Würde es jedes Mal anders sein. (Java)Methodenaufruf gegen Methodenausführung

Antwort

1

Das Aufrufen einer Methode und das Ausführen einer Methode sind Synonyme - sie sind dasselbe.

Vielleicht verstehe ich Ihre Frage falsch.

+0

Okay, also was es bedeutet, wenn ich messen muss, wie lange jeder Aufruf einer bestimmten Methode dauert, dann bedeutet das die Zeit, die eine Methode zur Ausführung benötigt. Also, wenn ich die Zeit vor dem Aufrufen einer Methode messen und nachdem die Methode zurückgibt und dann die Differenz berechnen, die mir die Methodenaufruf-/Methodenausführungszeit gibt. – kd44

+0

@ kd44 - ziemlich viel. – Oded

+0

Aufruf ruft die Methode auf, sobald Sie in der Ausführung der Methode sind. – m4tt1mus

3

Aufruf = Ausführung ---> Aufrufzeit = Ausführungszeit.

4

Aufrufzeit ist die Zeit, die zum Aufrufen oder Aufrufen der Methode benötigt wird. Ausführungszeit ist die Zeit, die benötigt wird, um den Hauptteil der Methode auszuführen.

Siehe 7.7 Invoking Methods und Instruction Set in der JVM-Spezifikation. Es gibt 4 verschiedene Möglichkeiten, in denen Java-Methoden aufgerufen werden können:

  1. invokevirtual - verwendet für Methodenaufrufe
  2. invokeinterface - für Interface-Methode verwendet, ruft
  3. invokestatic - verwendet für statische Methoden
  4. invokespecial - verwendet für Konstruktoren, private Methoden und super Anrufe

invokestatic ist normalerweise am schnellsten, weil es an eine bestimmte Klasse gebunden ist, während die anderen relativ langsam sein können. invokeinterface ist möglicherweise die langsamste Klasse, da Klassen mehrere Schnittstellen implementieren können und die richtige Methode aufgelöst werden muss.

Verschiedene Aufrufe der gleichen Methode werden die gleiche Zeit dauern.

+0

Das führt mich zu einer interessanten Frage. Die Sicherheit von Java hängt von der VM ab. Können Sie also invokestatic verwenden, um die Basisklassenversion einer abgeleiteten Klassenmethode aufzurufen? Wenn dem so ist, scheint das ein mögliches Sicherheitsloch zu sein. – Omnifarious

+0

@Onmifarious: Um dies zu tun, müssten Sie die '.class' Datei ändern, und ich sehe das nicht als Sicherheitslücke in der VM. – casablanca

+0

Konnten Sie nicht eine '.class' Datei mit einer neuen Klasse, die' invokestatic' genannt hat, für die Methoden einer anderen Klasse erstellen? – Omnifarious