如何知道在热点中编译类或方法花了多少时间?

时间:2017-08-29 16:03:57

标签: jvm jit jvm-hotspot

1,我想知道在JIT期间在热点上编译一个类或方法花了多少时间(我们遇到了一些超时问题,我们怀疑它可能是由于编译时间过长造成的)?这次有跟踪标志或其他方法吗?

2,BTW,如果方法是第一次运行,那么编译时间将为0,因为完全没有编译过程,对吧?

2 个答案:

答案 0 :(得分:2)

JVM标志:-XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation2

    289  425       4       java.time.LocalDate::until (116 bytes)
    292  360       3       java.time.ZoneId::of (85 bytes)   made not entrant
    293  426       4       java.time.LocalDate::from (68 bytes)
    293  386       3       java.time.LocalDate::from (68 bytes)   made not entrant
    293  426   size: 248(96) time: 0 inlined: 54 bytes
    297  425   size: 3688(2272) time: 8 inlined: 1092 bytes
     ^    ^          ^                ^          ^
     |    |          |                |          |
     |    |          compiled bytes   |          bytecodes inlined
     |    compilation ID              method compilation time (ms)
     timestamp (ms from JVM start)

请注意

  • JIT编译器在应用程序运行时在后台运行;它不太可能导致延误或超时。
  • 通常有多个编译器线程; PrintCompilation输出可能会显示为交错。
  • 可以使用不同的优化级别多次(重新)编译方法。

答案 1 :(得分:0)

jitwatch可以记录和显示jit编译日志。

jitwatch screenshot with log