Karen,

On 2018-03-26 17:15, Karen Kinnear wrote:
Claes,

Discussed with Lois. We think that it would make more sense to pass the new 
argument into MethodHandles::resolve_MemberName and at all three places that we 
currently CHECK_PENDING_EXCEPTION/return null there
    - if speculative flag is set - CLEAR_PENDING_EXCEPTION before you return 
null
    - and yes - do this for all three cases, not just the METHOD case

ok.


Couple of questions though:
1) do you actually reach the new code in MHN_resolve_Mem? Could you possibly 
add an assertion there that
there is no exception pending and/or print the exception if there is one 
pending?
With the CHECK_NULL in the call to resolve_MemberName I do not expect you to 
get here with a pending exception,
so the question arises as to when you would have a null resolved, but no 
pending exception?

Yes, we reach it, and by returning NULL there a null return is observed on the java side, regardless of whether or not I CLEAR_PENDING_EXCEPTION. I'd be happy to add more
assertions.


2) with the change you just sent out - do you really get a performance 
improvement?
I’m confused about where that comes from

By not throwing a new NSME from MHN_resolve_Mem, the effective number of created exceptions (shown by -Xlog:exceptions) is cut in half.  On a startup test that does 10 failed resolveOrNull calls, this equates to a reduction in retired instructions by ~2M on my
machine, as measured by perf.


My apologies - I was incorrect - we are not converting Error -> Exception in 
MHN_resolve_Mem - so I
do not know why we are burying existing exceptions here - longer-term I think 
we need to clean this up
and as David points out - at least for the ResolveOrFail case - store the 
original exception as a cause.

Right.

/Claes

Reply via email to