运行Java 1.6应用程序(1.6.0_03-b05)时,我添加了-XX:+PrintCompilation
标志。对于一些方法的输出,特别是那些我知道会被频繁调用的方法,我看到了文本made not entrant
和made zombie
。
这是什么意思?最好的猜测是,在重新编译该方法或具有更高优化级别的依赖项之前,进行了反编译步骤。真的是这样吗?为什么会出现“zombie”和“entrant”?
例如,以下是一些输出,其中某些行之间有相当长的时间间隔:
[... 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]