title: java PrintCompilation output: what's the meaning of "made not entrant" and "made zombie"
body: <p>When running a Java 1.6 (1.6.0_03-b05) app I've added the <code>-XX:+PrintCompilation</code> flag. On the output for some methods, in particular some of those that I know are getting called a lot, I see the text <code>made not entrant</code> and <code>made zombie</code>.</p>
  
  <p>What do these mean? Best guess is that it's a decompilation step before recompiling either that method or a dependency with greater optimisation. Is that true? Why "zombie" and "entrant"?</p>
  
  <p>Example, with quite a bit of time between some of these lines:</p>
  
  <pre><code>[... 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]
  </code></pre>