Java Virtual Machine Instruction Set页面提供有关助记符的信息,例如aaload,aastore ......等
但是,没有提到这些助记符会占用的cpu周期,也没有关于这些助记符的字节大小或字大小的任何信息。
知道可以找到这些信息的任何想法吗?
答案 0 :(得分:6)
如前所述,您寻找的信息不存在,因为它不存在。除了上面提到的不同JVM可以以不同方式实现指令(或指令组合)的事实之外,单个JVM也可以以不同方式实现它。
对于intstructions的不同组合(根据它们与其他指令一起使用的方式以不同方式实现指令可能更有效)和不同的执行时间都是如此。由于JVM始终控制着程序的执行,它可以(并且确实)监视程序的行为,并决定重新优化经常运行的代码(或代码满足其他一些标准)。例如,这可能导致您的指令在执行函数的第一千次被转换为某组机器指令,并被转换为另一组执行的其余部分。
这种高级优化能力(和其他)是Java字节代码的优化最好留给JVM的原因,也是为什么在某些情况下,Java程序比同等的C或C ++程序(C和C ++)快得多的原因通常只是静态优化,而Java是动态优化的。)
答案 1 :(得分:3)
规范是JVM需要实现的,而不是它如何实现。来自IBM和Sun等供应商的不同平台和不同JVM将使用不同的实现,因此您无法假设字节大小和处理器周期。如果您真的想要查找更多信息,可以下载Open JDK源并查看它,但这只是一个实现,您不能假设其他实现具有完全相同的性能特征。