有没有办法计算java中的指令数量

时间:2015-04-02 05:35:12

标签: java cpu instruction-set

我想知道我的java代码消耗了多少指令来执行。我正在寻找一个api,它开始指令计数,最后的指令总数应该在最后返回

例如:

public static void main()
{
  int a=0;
  int b=0;
  int c=0;
  startCountinst();
  if(a==b)
  {
     c++;
  }
  int n = stopCountinst();
}

最后,n应表示调用startCountinst()后执行的指令总数。在java中可以计算指令吗?

4 个答案:

答案 0 :(得分:3)

在Linux上,您可以运行perf cpu-cycles这将计算程序使用的CPU周期数。如果您使用perf list,您可以看到监控应用程序的所有其他选项。

答案 1 :(得分:2)

如果您对JVM指令的数量感兴趣,可以手动计算它们。来源:

public static void main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    if (a == b)
    {
        c++;
    }
}

您可以通过调用javap -c YouClassName来查看字节码:

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        

您感兴趣的if语句可编译为4个JVM指令。

答案 2 :(得分:1)

我喜欢这个问题。可能有助于衡量绩效。但并非每条指令都需要相同的时间。所以你最好看看你的代码分析。

JProfiler相当受欢迎:

https://www.ej-technologies.com/products/jprofiler/overview.html

还有几种免费的替代品。只是Google for java profiler并看一看。提供大量信息。

答案 3 :(得分:0)

本机CC++程序在编译时将包含一组程序集(机器)指令。因此,讨论运行C / C++代码时将执行的指令数量是有意义的。但是,在编译Java类时,会生成一个由与平台无关的字节码组成的.class文件。与Java指令数最接近的是字节码指令的数量。

博士。垃圾有Eclipse plugin for visualizing bytecode。您可以通过检查确定字节码指令的数量,然后确定已执行的总指令数。