各个Java字节码的执行时间有多少差异?

时间:2014-07-11 13:32:37

标签: java performance profiling bytecode instrumentation

理想情况下,每个字节码的cpu周期测量值会显示这一点,尽管我还没有找到关于该主题的更多内容。

编辑: 如果我有一个可以以两种不同的方式进行优化的程序,并且每个优化都会导致为每个变体程序执行5个更少的字节码,那么除了这个度量之外,两个优化都不能被告知。

然而,当在JVM上运行时,每个中的5个字节代码可能转换为完全不同的性能特征(假设JVM在测量两个程序时可以表现得尽可能相似)。

两个优化的变体程序需要区分多少个字节码,然后才能合理地确定一个程序的性能优于另一个?

2 个答案:

答案 0 :(得分:1)

任意大。

即使您只考虑在单个处理器上运行的单个VM实现,由于使用了及时编译,因此存在巨大差异。 VM不必逐个执行字节码操作。相反,它会对其进行分析,优化它们,并将其编译为本机代码。所以字节码和执行时间之间没有任何对应关系。

答案 1 :(得分:0)

这没有任何意义。任何字节码的执行都需要一段时间......没有人真正应该关心。时间关键代码被编译成本机指令,然后与字节码没有对应关系,允许你说出iload_1需要多长时间。

多个字节码经常被编译成单个HW指令,一些字节码可能被编译成多个HW指令,但很多时候很难说出会发生什么(例如,而不是3个字节码,你有5个HW指令)。

然后我们来解决硬件指令的时序问题,这可能更复杂:

  • 多条(通常为4条)指令可以并行执行
  • 由于数据依赖性,某些指令可能会被阻止
  • 他们被处决out of order
  • 依旧......