运行Java 1.6(1.6.0_03-b05)应用程序时,我添加了-XX:+PrintCompilation标志。在某些方法的输出中,尤其是我所知道的一些方法被调用了很多,我看到了文本made not entrantmade zombie

这些是什么意思?最好的猜测是,在重新编译该方法或优化程度更高的依赖项之前,这是一个反编译步骤。真的吗?为什么是“僵尸”和“进入者”?

示例,其中一些行之间有很多时间:

[... near the beginning]
42       jsr166y.LinkedTransferQueue::xfer (294 bytes)

[... much later]
42    made not entrant  jsr166y.LinkedTransferQueue::xfer (294 bytes)
---   n   sun.misc.Unsafe::compareAndSwapObject
170       jsr166y.LinkedTransferQueue::xfer (294 bytes)
170   made not entrant  jsr166y.LinkedTransferQueue::xfer (294 bytes)
  4%      jsr166y.LinkedTransferQueue::xfer @ 29 (294 bytes)
171       jsr166y.LinkedTransferQueue::xfer (294 bytes)

[... even later]
42    made zombie  jsr166y.LinkedTransferQueue::xfer (294 bytes)
170   made zombie  jsr166y.LinkedTransferQueue::xfer (294 bytes)
171   made not entrant  jsr166y.LinkedTransferQueue::xfer (294 bytes)
172       jsr166y.LinkedTransferQueue::xfer (294 bytes)

[... no further logs]

最佳答案

我已经在my blog上收集了一些相关信息。我发现的Cliff Click评论说:

08-18 18:58