Temps total de la méthode en Java VisualVM

En Java VisualVM, existe-t-il un moyen d’afficher le temps total de la méthode, plutôt que le “temps propre”? (Ce dernier n’est pas particulièrement utile, car il ne vous dit rien sur le temps réellement nécessaire pour exécuter les méthodes.)

Dans la négative, existe-t-il un profileur Java libre autonome qui calcule le temps total de la méthode?

En regardant les données de trace dans une vue “snapshot” vous permet de voir le temps total ainsi que le temps.

Appuyez sur le bouton “instantané” qui apparaît sur la table des résultats. Cela créera un nouvel onglet contenant une vue “Call Tree” qui décompose le temps total et le self. La vue “combinée” fournit également ces informations, mais divise l’espace de l’écran en une vue “Points actifs” similaire à la vue de profilage standard.

Les instantanés peuvent être créés à partir des données standard “Profiler” ou “Sampler”. Cependant, les instantanés “Profiler” ne peuvent être créés que lorsque l’application est fermée, tandis que ceux “Sampler” peuvent être créés à tout moment.

(Les informations ci-dessus sont basées sur VisualVM 1.3.1)

Il suffit de prendre un instantané des résultats du profilage. Vous obtiendrez l’heure de l’horloge murale ainsi que l’heure de votre domicile.

Il existe un moyen simple d’obtenir le temps total d’une routine en pourcentage du temps d’exécution de l’horloge murale (plutôt qu’en millisecondes). Il suffit d’utiliser ctrl-break pour obtenir un tas de photos lors de l’attente. La fraction d’entre eux contenant la routine est le pourcentage de temps qu’il faut. La précision dépend du nombre de sockets que vous prenez. Si vous ne cherchez que les problèmes, vous n’avez pas besoin d’une mesure de temps précise. Voici une brève explication de son fonctionnement.

Je pense que vous voulez savoir combien de temps chaque méthode d’exécution prend. Vous souhaitez utiliser JETM pour surveiller les performances. Cela vous donnerait l’heure d’entrée, l’heure de sortie et un décalage horaire pour chaque méthode. Vous découvririez quelle méthode prend combien de temps.

Si vous utilisez Spring, il devient alors facile d’intégrer JETM http://jetm.void.fm/howto/spring_2_x_integration.html

Vous pouvez utiliser jprofiler ou certains outils javaagent pour surveiller le temps d’exécution de la méthode. Il existe certains outils open source sur le github, comme simpleAPM.

JavaAssist est une bibliothèque de classes permettant de manipuler votre code d’octet Java sans toucher à la source. Prenons un exemple de mesure du temps pris pour exécuter une méthode.

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

Pour mesurer le temps nécessaire à l’exécution de subject.method2() , vous pouvez améliorer Subject.methods() en ajoutant le début et la fin du code comme indiqué.

 public class JavaAssist { public static void main(Ssortingng[] 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 } } } 

Résultat: Début: Mercredi 26 Mai 17:24:18 HAE 2010 Fin: Mercredi 26 Mai 17:24:20 HAE 2010

Référence http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html#read

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

Origin Post from: http://www.senthilb.com/2010/05/javaassist-byte-code-enhancement.html

vous pourriez utiliser un

  long startTime = System.currentTimeMillis(); 

au début

et

  long endTime = System.currentTimeMillis(); 

et enfin pour obtenir le résultat

  long result = endTime - startTime; //Note, part might be backwards, I don't //Remember