测量 class 中的 JVM 指令数
Measuring the number of JVM instructions in a class
我需要计算用于执行具有多个参数的方法的 JVM 指令数。我为该方法提供了各种参数,以测量针对每种情况执行的 JVM 指令数。
我可以使用哪些工具?源代码是用 Scala 编写的,但无论如何它都会生成 class 文件,因此任何支持 JVM 的工具都可以正常工作。我在考虑 profiler,但我认为 profiler 可能用于不同的目的。
有一个很好的工具可以帮助您了解 Java HotSpot 即时 (JIT) 编译器在您的程序执行期间的行为 - JITWatch。
警告:现代 JVM 过于复杂,并且进行了各种优化,因此从性能的角度来看,JVM 的指令数量毫无意义。如果您尝试测量一小段代码,如果不非常非常详细地了解 JVM 正在做什么,要正确地完成它真的很复杂。请注意(http://shipilev.net/blog/2014/java-scala-divided-we-fail/)并自行承担使用风险:
- 始终包含一个预热阶段,该阶段会一直运行您的方法,足以在计时阶段之前触发所有初始化和编译。
- 注意-client 和-server 之间的区别,以及OSR 和常规编译之间的区别。
我需要计算用于执行具有多个参数的方法的 JVM 指令数。我为该方法提供了各种参数,以测量针对每种情况执行的 JVM 指令数。
我可以使用哪些工具?源代码是用 Scala 编写的,但无论如何它都会生成 class 文件,因此任何支持 JVM 的工具都可以正常工作。我在考虑 profiler,但我认为 profiler 可能用于不同的目的。
有一个很好的工具可以帮助您了解 Java HotSpot 即时 (JIT) 编译器在您的程序执行期间的行为 - JITWatch。
警告:现代 JVM 过于复杂,并且进行了各种优化,因此从性能的角度来看,JVM 的指令数量毫无意义。如果您尝试测量一小段代码,如果不非常非常详细地了解 JVM 正在做什么,要正确地完成它真的很复杂。请注意(http://shipilev.net/blog/2014/java-scala-divided-we-fail/)并自行承担使用风险:
- 始终包含一个预热阶段,该阶段会一直运行您的方法,足以在计时阶段之前触发所有初始化和编译。
- 注意-client 和-server 之间的区别,以及OSR 和常规编译之间的区别。