<div>Hi Antoine,</div><div><br></div>With the HotSpot server compiler (C2), even if you forced some methods to get compiled, if you haven&#39;t let it run in the interpreter for a couple of times before the compilation, you may well get a false sense of compilation due to unloaded classes. When the interpreter runs, it&#39;ll load classes on demand, where as when C2 compiles a method, if it sees a point in the method that encounters a class not-yet-loaded or already-unloaded, it&#39;ll generate a call to a trampoline that jumps back into the interpreter; that&#39;s called an &quot;uncommon trap&quot;.<div>
<br></div><div>There&#39;s are some documentation on the HotSpot VM here: <a href="http://wikis.sun.com/display/HotSpotInternals">http://wikis.sun.com/display/HotSpotInternals</a></div><div><a href="http://wikis.sun.com/display/HotSpotInternals"></a>But I don&#39;t think there&#39;s any official documentation that describes the whole compilation process, yet. Parts of it are described in a few papers. &quot;The Java HotSpot Server Compiler&quot;(<a href="http://www.usenix.org/events/jvm01/full_papers/paleczny/paleczny.pdf">http://www.usenix.org/events/jvm01/full_papers/paleczny/paleczny.pdf</a>) might be a good starting point; the &quot;2. Runtime Environment&quot; part should have what you want to know. Although it doesn&#39;t cover how the tiered compilation system in current version of HotSpot works.</div>
<div><br></div><div>Compiled methods are managed with an &quot;nmethod&quot; object. There&#39;s a field, &quot;_code&quot; in the methodOopDesc of the method compiled that keeps track of the compiled code.</div><div>There are two separate entry points in a methodOopDesc, one is _from_compiled_entry, the other is _from_interpreted_entry. Read the comments in oops/methodOop.hpp, it explains what these two entry points are for.Depending on whether the caller is interpreted or compiled, going through the entry point may go into a c2i (compiled-to-interpreted) or i2c (interpreted-to-compiled) adapter.</div>
<div><br></div><div>An nmethod has two entry points by itself, one is the &quot;entry point&quot; and the other is the &quot;verified entry point&quot;. These are used to implement inline caching for virtual call dispatch. More details described here: <a href="http://wikis.sun.com/display/HotSpotInternals/VirtualCalls">http://wikis.sun.com/display/HotSpotInternals/VirtualCalls</a></div>
<div><div><br></div><div>Regards,</div><div>Kris Mok<br><br><div class="gmail_quote">On Sat, Jun 11, 2011 at 12:46 AM, Igor Veresov <span dir="ltr">&lt;<a href="mailto:igor.veresov@oracle.com">igor.veresov@oracle.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">On 6/10/11 8:52 AM, antoine artaud-macari wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
  Dear HotSpot developers !<br>
<br>
We are working on performance optimization for a Java critical system<br>
and we would like to force the compilation of some Java methods (chosen<br>
by our own algorithm).<br>
So we have looked at the OpenJDK HotSpot source code and for time being<br>
we succeeded in forcing compilation of these methods but the interpreter<br>
still executes the bytecode.<br>
For example, we used :<br>
<br>
    nmethod * nm = CompileBroker::compile_method(m, 0, m, 0,&quot;forced<br>
    compilation&quot;, THREAD);<br>
<br>
where m is a methodHandle on the method to be compiled.<br>
<br>
Would you please send us some technical reference or documentation about<br>
compilation process or how compiled method are executed ?<br>
<br>
<br>
</blockquote>
<br></div></div>
For osr_bci parameter you should specify the InvocationEntryBci constant (which is -1).<br>
<br>
igor<br>
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Best regards,<br>
<br>
--<br>
*Antoine ARTAUD-MACARI *****<br>
<br>
<br>
<br>
</blockquote>
<br>
</blockquote></div><br></div></div>