review (S) for 6877221: Endless deoptimizations in OSR nmethod

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Tue Feb 16 15:24:20 PST 2010


Tom,

So making athrow non rerunnable will force to generate runtime call to trow
instead of uncommon trap. Correct?

Otherwise looks fine.

Thanks,
Vladimir

Tom Rodriguez wrote:
> http://cr.openjdk.java.net/~never/6877221
> 
> 6877221: Endless deoptimizations in OSR nmethod
> Reviewed-by:
> 
> When emitting the inline exception code if we can't handle all the
> exception types inline we will try to fall back to an uncommon trap
> for bytecodes that can be rerun to produce the exceptional condition.
> All bytecodes except the various invokes can be handled this way.  The
> cases we currently can't handle inline are unloaded catch classes,
> which will require class loading during lookup and catch classes that
> have subclasses.  That latter is a historical limitation from the
> times when type checks were more expensive.  Currently athrow is
> handled by rerunning it which means that any exception forwarding
> logic that uses athrow will force us back into the interpreter for
> every exception dispatch through this nmethod.  Since this fix will
> likely be backported I want to do the simple fix of removing athrow
> from the set of rerunnable bytecodes.  A more complete fix involving
> rewriting catch_inline_exceptions to avoid the uncommon trap with
> Action_none and to perform full type checks inline will be done for
> hs18.
> 
> I collected some stats on how catch_inline_exceptions behaves to get
> some sense of which paths are used.  These numbers are generated every
> benchmark in reference_server plus specjvm2008.  In 22631 calls, 16050
> terminate by unwinding the frame, 3280 dispatch to a default exception
> handler, 3176 call the rethrow function, and 125 emit an uncommon
> trap.  Of those uncommon traps the bytecode breakdown is this:
>   
>   14 anewarray
>   52 athrow
>   52 new
>    7 newarray
> 
> Of the athrows, 43 are from unloaded classes and the other 9 are
> because the catch class had subclasses.
> 
> src/share/vm/opto/parse1.cpp


More information about the hotspot-compiler-dev mailing list