7
votes

Y a-t-il un moyen de compter le nombre d'instructions en Java

Je veux savoir combien d'instructions que mon code Java consomme à exécuter. Je cherche une API qui commence le nombre d'instructions et le nombre total total d'instructions doit être renvoyé à la fin

par exemple: xxx

à la fin, n devrait représenter le nombre total d'instructions exécutées après avoir appelé startCountInst () . Est-il possible en Java de compter les instructions?


5 commentaires

pourquoi vous voulez compter le nombre d'instructions ??


1. Choisissez une langue. 2. Définissez à quel niveau vous souhaitez compter le nombre d'instructions (code octet. Assemblage, Niveau de la machine). 3. La réponse varie à chaque niveau basé sur le compilateur, JVM, l'architecture de la machine, etc. Il est donc impossible de donner une réponse appropriée


C'est en Java, donc évidemment du code octet. Il n'est donc pas possible de compter les instructions?


J'aimerais que la réponse soit oui: je trouverais un outil de comptage des instructions de bytecode exécutées très utiles (le problème des autres outils de suivi est que les résultats sont si variables d'une course à une autre). En principe, les comptes d'instruction de mesure devraient donner une métrique vraiment utile. pour vérifier la régression d'une libération logicielle à une autre.


Java Byte Code est exécuté en tant qu'assemblage du système d'exploitation, alors pourquoi ne seriez-vous pas capable de compter des instructions à ces couches? (OS Assm, JVM) serait utile de mesurer à la fois (en plus des cycles de la CPU) de nombreuses saveurs différentes de JVM ces jours-ci


4 Réponses :


2
votes

J'aime la question. Pourrait être utile pour mesurer la performance. Mais toutes les instructions ne prend pas une durée égale. Donc, vous feriez mieux de regarder le profilage de votre code.

JProfiler est plutôt populaire:

https://www.ej-technologies.com/products/jproducts/jprofiler/ Vue d'ensemble.html

Et il y a plusieurs alternatives gratuites disponibles. Juste Google pour Java Profiler et jetez un coup d'œil. Beaucoup d'informations disponibles.


1 commentaires

Le nombre d'instructions n'est pas directement lié à performance . 5 Les instructions pourraient prendre moins de temps qu'une instruction .. Donc, vos 2 premières phrases sont incorrectes



0
votes

Un programme C ou C ++ Le programme est compilé, consistera en un ensemble d'instructions de montage (machine). Il est donc logique de discuter du nombre d'instructions qui exécuteront lors de l'exécution d'un C / C ++ code. Toutefois, lorsque vous compilez une classe Java, vous générez un fichier .Class composé de bytecode indépendant de la plate-forme. La chose la plus proche du nombre d'instructions de Java serait le nombre d'instructions de bytecode.

dr. Les ordures ont un plug-in Eclipse pour visualiser Bytecode . Vous pouvez déterminer le nombre d'instructions de bytecode par inspection, puis déterminez combien d'instructions totales ont été exécutées.


0 commentaires

3
votes

sur Linux, vous pouvez exécuter Perf CPU-Cycles Compter le nombre de cycles CPU A utilise le programme. Si vous utilisez PERF LISTE Vous pouvez voir toutes les autres options de surveillance d'une application.


0 commentaires

2
votes

Si vous êtes intéressé par le nombre d'instructions JVM, vous pouvez les compter à la main. Source:

public static void main();
Code:
   0: iconst_0      
   1: istore_0      
   2: iconst_0      
   3: istore_1      
   4: iconst_0      
   5: istore_2      

   6: iload_0       
   7: iload_1       
   8: if_icmpne     14
  11: iinc          2, 1

  14: return        


2 commentaires

Oui, je suis d'accord avec vous, nous compterons à la main. Mais je veux compter les instructions pendant le temps d'exécution. Afin que je puisse faire des optimisations pendant l'exécution. N'est-il pas possible de compter les instructions?


Tant que le code n'est pas auto-modifiant, il devrait rester un nombre fixe d'instructions. (Ignorer que la JVM fera optimisation de l'exécution ...)