2

我是第一次尝试使用和了解visualgc垃圾回收监控工具。但是,图表上的多个输出之一,我无法理解。我试过这个链接,它是关于 visualgc 的 Oracle 文档: - visualgc - Visual Garbage Collection Monitoring Tool

无法理解:

在此处输入图像描述 显示编译时间的图表。我对编译时间的含义感到困惑。根据上面链接中的文档,这意味着编译过程花费的总时间,但为什么它显示:59 符合。JVM 是否多次编译代码?或者 59 只是 JVM 只编译一次的任务数量?我认为该代码只编译一次。

4

1 回答 1

2

通过“编译”,假设我们正在谈论将最初解释的字节码即时编译为本机代码。是的,同一段 Java 字节码可能要经过多次编译。一个熟悉的例子是当一个单态调用站点的类型断言失败时,强制重新编译成一个多态调用站点。一个方法可能有任意数量的调用站点,所以仅仅这个问题可能会导致任意数量的重新编译。

另请注意,在具有动态字节码生成的现代架构中,类通常在程序运行时生成、加载和卸载。这是连续 JIT 编译的另一个来源。

于 2013-11-02T13:10:23.110 回答