<div dir="ltr">Hi Eric,<div><br></div><div>Just looking at the code, the apparent difference is that an assert() only does the checking when -DASSERT is defined, which means that check won't be in product builds.</div>
<div><br></div><div>On the other hand, the explicit if() check will be available in product builds.</div><div>But that piece of code is guarded with WizardMode which is only available in debug builds, too...</div><div><br>
</div><div>So yeah, I think you're reading it right, that the later if() should never happen.</div><div><br></div><div>- Kris</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Mar 24, 2014 at 9:15 AM, Eric Caspole <span dir="ltr"><<a href="mailto:eric.caspole@amd.com" target="_blank">eric.caspole@amd.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In nmethod::make_unloaded, at line 1214, it asserts is_gc_active().<br>
Then at line 1225 the print line is<br>
 if (!Universe::heap()->is_gc_<u></u>active())<br>
so it will never happen? Am I reading this right?<br>
<br>
<br>
hotspot/src/share/vm/code/<u></u>nmethod.cpp<br>
<br>
1207 void nmethod::make_unloaded(<u></u>BoolObjectClosure* is_alive, oop cause) {<br>
1208<br>
1209   post_compiled_method_unload();<br>
1210<br>
1211   // Since this nmethod is being unloaded, make sure that dependencies<br>
1212   // recorded in instanceKlasses get flushed and pass non-NULL closure to<br>
1213   // indicate that this work is being done during a GC.<br>
1214   assert(Universe::heap()->is_<u></u>gc_active(), "should only be called during gc");<br>
1215   assert(is_alive != NULL, "Should be non-NULL");<br>
1216   // A non-NULL is_alive closure indicates that this is being called during GC.<br>
1217   flush_dependencies(is_alive);<br>
1218<br>
1219   // Break cycle between nmethod & method<br>
1220   if (TraceClassUnloading && WizardMode) {<br>
1221     tty->print_cr("[Class unloading: Making nmethod " INTPTR_FORMAT<br>
1222                   " unloadable], Method*(" INTPTR_FORMAT<br>
1223                   "), cause(" INTPTR_FORMAT ")",<br>
1224                   this, (address)_method, (address)cause);<br>
1225     if (!Universe::heap()->is_gc_<u></u>active())<br>
1226       cause->klass()->print();<br>
1227   }<br>
<br>
</blockquote></div><br></div>