Domanda

In Java VisualVM, c'è qualche modo per visualizzare il tempo totale metodo, piuttosto che "il tempo di sé"? (Quest'ultimo non è particolarmente utile, dal momento che non si dice nulla su quanto tempo i metodi effettivamente prendere a correre.)

In caso contrario, c'è un profiler Java gratuito standalone che fa calcolare il tempo totale di metodo?

È stato utile?

Soluzione

Guardando i dati di traccia in una vista "istantanea" consente di vedere il totale così come il tempo di auto.

Premere il tasto "istantanea" che appare sulla tabella dei risultati. Questo creerà una nuova scheda che contiene una vista "Call Tree" che scompone l'auto in funzione del tempo totale. Il punto di vista "combinato" fornisce anche questa informazione, ma divide lo spazio sullo schermo con un "hot spot" vista che è simile a quella di profilazione standard.

Gli snapshot possono essere creati da uno standard "Profiler" o dati "Campionatore". Tuttavia, "Profiler" istantanee possono essere creati solo prima l'applicazione viene chiusa, mentre le "Sampler" quelli possono essere creati in qualsiasi momento.

(Le informazioni di cui sopra si basa su VisualVM 1.3.1)

Altri suggerimenti

Basta prendere una fotografia istantanea dei risultati di profiling. Si otterrà il tempo di orologio a muro così come il tempo di auto lì.

C'è un modo semplice per ottenere il tempo totale di una routine come percentuale del tempo di esecuzione parete-clock (piuttosto che millisecondi). Basta usare ctrl-break per avere un po 'di stackshots mentre siete in attesa per esso. La frazione di esse, contenente la routine è la% di tempo necessario. La precisione dipende da quanti colpi si prende. Se siete solo in cerca di dove sono i problemi, non è necessario misurazione del tempo di precisione. Ecco una breve spiegazione di come funziona.

Credo che si vuole scoprire quanto tempo fa ogni esecuzione metodo prende. Si consiglia di utilizzare JETM per monitorare le prestazioni. Questo darà il tempo di ingresso, tempo di uscita e una differenza di tempo per ciascun metodo. Si potrebbe scoprire quale metodo sta prendendo la quantità di tempo.

Se si utilizza Primavera allora diventa facile da integrare JETM http://jetm.void.fm/howto/spring_2_x_integration.html

è possibile utilizzare JProfiler o alcuni strumenti javaagent per monitorare il metodo execute tempo per you.There è alcuni strumenti open source sul github, come simpleAPM.

JavaAssist è una libreria di classi per manipolare il vostro codice Java byte senza toccare la fonte. Prendiamo un esempio di misura tempo necessario per eseguire un metodo.

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

Per misurare tempo impiegato per l'esecuzione subject.method2(), si potrebbe migliorare la Subject.methods() con l'aggiunta di codice di avvio e fine del metodo, come indicato.

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
        }
    }
}

Output: Inizio: Mer 26 Mag 2010 17:24:18 CEST Fine: Mer 26 Mag 17:24:20 EDT 2010

Riferimento http://www.csg.is .titech.ac.jp / ~ Chiba / javassist / tutorial / tutorial.html # lettura

http: //www.csg.is.titech .ac.jp / ~ Chiba / javassist / html /

Origine Inserimento da: http://www.senthilb.com/2010/05/ javaassist-byte-code-enhancement.html

è possibile utilizzare un

 long startTime = System.currentTimeMillis();

all'inizio

e

 long endTime = System.currentTimeMillis();

e, infine, per ottenere il risultato

 long result = endTime - startTime; //Note, part might be backwards, I don't
                                    //Remember
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top