我目前正在进行一些Java优化。似乎评估我的进度的最佳方法是使用System.nanoTime重复运行并收集运行时统计信息。
我的大多数背景都是嵌入式DSP应用程序。在我的嵌入式开发中,我可以访问CPU周期计数器(这是一个很好的优化措施)。 JRE的作用类似于合成CPU,是否有办法获取已执行的指令数或JRE时钟等效信息?
提前感谢任何提示。 J.R。
答案 0 :(得分:2)
字节代码计数几乎肯定对你想要的东西无用。它们在运行时的性能方面完全是虚拟/概念。唯一重要的是已经预热的代码的过去时间。
我建议你看一下JMH对你的代码进行微基准测试。 http://openjdk.java.net/projects/code-tools/jmh/
如果您来自DSP /实时背景,我建议您查看延迟分布并最大限度地降低分配率。
注意:JVM在指令之间注入“安全点”,以检查线程是否需要停止,例如执行垃圾收集。垃圾收集可能需要几秒钟。但是,安全点通常会被优化掉,以避免减慢您的程序。
简而言之,这意味着指令之间的时间可能不算什么,它可能是某种东西,可能是几秒甚至几分钟,所以我不打扰它们。