Frage

In Java VisualVM, ist es eine Möglichkeit, Gesamt Methode Zeit anzuzeigen, anstatt „Selbst Zeit“? (Letzteres nicht besonders nützlich, da es Ihnen nicht sagen nichts darüber, wie viel Zeit Methoden nehmen tatsächlich auszuführen.)

Wenn nicht, gibt es ein eigenständigen freien Java-Profiler, die Gesamt Methode Zeit tun berechnen?

War es hilfreich?

Lösung

in einer „Momentaufnahme“ Blick auf die Trace-Daten der Suche können Sie die Gesamt sowie die Selbst Zeit sehen.

Durch Drücken der „Snapshot“ -Taste, die über die Tabelle mit den Ergebnissen angezeigt. Dadurch wird eine neue Registerkarte erstellen, die eine „Call-Tree“ Ansicht enthält, die gegen Gesamtzeit des Selbstbricht. Der „kombinierte“ -Ansicht bietet auch diese Informationen, sondern teilt den Platz auf dem Bildschirm mit einer „Hot Spots“, der Ansicht auf die Standardprofilansicht ähnlich ist.

Snapshots kann entweder Standard "Profiler" oder "Sampler" Daten erstellt werden. Jedoch kann „Profiler“ Snapshots nur erstellt werden, bevor die Anwendung geschlossen wird, während „Sampler“ Einsen können jederzeit erstellt werden.

(Die Angaben beruhen auf VisualVM 1.3.1)

Andere Tipps

Nehmen Sie einfach einen Schnappschuss der Profilierungs Ergebnisse. Sie werden die Wand-Uhr-Zeit sowie Selbst Zeit dort.

Es gibt eine einfache Möglichkeit, die Gesamtzeit eine Routine als Prozentsatz der Wand Uhr Ausführungszeit (statt Millisekunden) zu erhalten. Verwenden Sie einfach Strg-Pause ein Bündel von stackshots zu bekommen, während Sie es auf jemanden warten. Der Bruchteil von ihnen die Routine enthält, ist das% der Zeit, die benötigt. Die Genauigkeit hängt davon ab, wie viele Aufnahmen, die Sie nehmen. Wenn Sie gerade suchen, wo die Probleme sind, müssen Sie keine Präzisionszeitmessung. Hier eine kurze Erklärung, wie es funktioniert.

Ich glaube, Sie wollen herausfinden, wie viel Zeit ist jede Methode Ausführung erfolgt. Sie würden wollen JETM verwenden, um die Leistung zu überwachen. Dies würde Ihnen Einfahrtzeit, Ausgangszeit und eine Zeitdifferenz für jede Methode. Sie würden herausfinden, welche Methode ist, wie viel Zeit.

Wenn Sie Frühling verwenden, dann wird es einfach JETM zu integrieren http://jetm.void.fm/howto/spring_2_x_integration.html

Sie jprofiler oder einige javaagent Tools verwenden, kann das Verfahren ausführen Zeit für you.there ist einige Open-Source-Tools auf dem Github, wie simpleAPM zu überwachen.

JavaAssist ist eine Klassenbibliothek Java-Byte-Code zu manipulieren, ohne die Quelle zu berühren. Nehmen wir ein Beispiel für die Messung Zeit, um ein Verfahren auszuführen.

public class Subject {
    /**
     * Timetaken for start & end of the method
     * 
     * @throws InterruptedException
     */
    public void method2() throws InterruptedException {
        // Some business logic :)
        Thread.sleep(2000);
    }
}

Zur Zeit zur Ausführung subject.method2() genommen zu messen, können Sie die Subject.methods() durch Hinzufügen von Code Beginn und das Ende des Verfahrens verbessern könnten, wie gezeigt.

public class JavaAssist {
    public static void main(String[] args) {
        timeTaken();
    }

    public static void timeTaken() {
        try {
            ClassPool p = ClassPool.getDefault();
            CtClass cc = p.get("Subject");
            CtMethod meth2 = cc.getDeclaredMethod("method2");
            meth2.insertBefore("System.out.println(\" Start : \"+new java.util.Date());");
            meth2.insertAfter("System.out.println(\" End : \"+new java.util.Date());");
            // cc.writeFile(".");
            Class c = cc.toClass();
            Subject s = (Subject) c.newInstance();
            s.method2();
            cc.detach();
        } catch (Exception e) {
            // suppressed
        }
    }
}

Ausgabe: Beginn: Mi 26. Mai 17.24.18 EDT 2010 Ende: Mi 26. Mai 17.24.20 EDT 2010

Referenz http://www.csg.is .titech.ac.jp / ~ chiba / Javassist / tutorial / tutorial.html # lesen

http: //www.csg.is.titech .ac.jp / ~ chiba / Javassist / html /

Herkunft Beitrag von: http://www.senthilb.com/2010/05/ javaassist-Byte-Code-enhancement.html

Sie könnte ein verwenden

 long startTime = System.currentTimeMillis();

am Anfang

und

 long endTime = System.currentTimeMillis();

und schließlich das Ergebnis zu erhalten

 long result = endTime - startTime; //Note, part might be backwards, I don't
                                    //Remember
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top