運行Java 1.6(1.6.0_03-b05)應用程序時,我添加了-XX:+PrintCompilation
標誌。在某些方法的輸出中,尤其是我知道的那些方法中的一些會被調用很多,我會看到文本made not entrant
和made zombie
。java PrintCompilation輸出:「made not entrant」和「made 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]
Kris Mok給JodaStephen寫了一封回覆,現在他的博客已經鏈接了,並且在對-XX:+ PrintCompilation的描述中更加完整。這裏的鏈接: https://gist.github.com/1165804#file_notes.md – Blaisorblade 2011-11-16 18:15:09