review (S) for 6877221: Endless deoptimizations in OSR nmethod
Vladimir Kozlov
Vladimir.Kozlov at Sun.COM
Tue Feb 16 15:59:18 PST 2010
Good. Thanks, Tom.
Vladimir
Tom Rodriguez wrote:
> On Feb 16, 2010, at 3:24 PM, Vladimir Kozlov wrote:
>
>> Tom,
>>
>> So making athrow non rerunnable will force to generate runtime call to trow
>> instead of uncommon trap. Correct?
>
> Yes and we'll get CatchProj's off the call to handle/describe all the exception edges.
>
> tom
>
>> 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