我第一次尝试使用和理解visualgc垃圾收集监控工具。但是,图中的多个输出之一,我无法理解。我试过这个链接,这是关于visualgc的Oracle文档: - visualgc - Visual Garbage Collection Monitoring Tool
无法理解:
图表显示编译时间。我对编译时的含义感到困惑。根据上面链接的文档,它意味着花在编译过程上的总时间,但为什么它显示:59符合。 JVM是否多次编译代码?或者59只是JVM只编译一次的任务数量?我认为代码只编译一次。
答案 0 :(得分:1)
通过“编译”,我们假设我们正在谈论将最初解释的字节码即时编译为本机代码。是的,同一段Java字节码可能会多次进行编译。一个熟悉的例子是当一个单态调用站点的类型断言失败时,强制重新编译成一个变形调用站点。一个方法可能有任意数量的调用站点,因此这种关注可能导致任意数量的重新编译。
另请注意,在使用动态字节码生成的现代体系结构中,通常在程序运行时生成,加载和卸载类。这是连续JIT编译的另一个来源。