При запуске приложения Java 1.6 (1.6.0_03-b05) я добавил флаг -XX:+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]