RFR 8062116: JVMTI GetClassMethods is Slow
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Tue Nov 4 19:57:54 UTC 2014
Hi Jeremy and Coleen,
I'm reviewing this too.
We also need to run the nsk.jvmti, nsk.jdi and jtreg jdi tests.
Thanks,
Serguei
On 11/3/14 12:19 PM, Coleen Phillimore wrote:
>
> Hi Jeremy,
>
> I reviewed your new code and it looks fine. I had one comment in
>
> http://cr.openjdk.java.net/~jmanson/8062116/webrev.00/src/share/vm/prims/jvmtiEnv.cpp.udiff.html
>
>
> The name "need_to_resolve" doesn't make sense when reading this code.
> Isn't it more like "need_to_ensure_space" ? I think method resolution
> with the other name, which it doesn't do.
>
> I was trying to find a way to make this new code not appear twice
> (maybe with a local jvmtiEnv function get_jmethodID(m) - instanceK_h
> is m->method_holder()).
Agreed on the above.
>
> Also, I was trying to figure out if the new class in utilities called
> chunkedList.hpp could be used to store jmethodIDs, since the data
> structures are similar. There is still more things in JNIMethodBlock
> has to do so I think a specialized structure is still needed (which is
> why I originally wrote it to be very simple). I'm not sure if the
> comment above it still applies. Maybe only the first and third
> sentences. Can you rewrite the comment slightly?
>
> Your other comments in the changes are good.
>
> I can't completely answer your question about reusing free_methods -
> but if a jmethodID is created provisionally in
> InstanceKlass::get_jmethod_id and not needed because it loses the race
> in the method id cache, it's never handed back to native code, so it's
> safe to reuse. This is different than jmethodIDs for methods that are
> unloaded. They are cleared and never reused. At least that's my
> reading of this caching code but it's pretty complicated stuff.
>
> I've also run our nsk and jck vm/jvmti on this change and they all
> passed. I'd be happy to sponsor it with these suggested changes and
> it needs another reviewer.
>
> Thanks for diagnosing and fixing this problem!
> Coleen
>
>
> On 10/30/2014 01:02 PM, Jeremy Manson wrote:
>> There's a significant regression in the speed of JVMTI
>> GetClassMethods in
>> JDK8. I've tracked this down to allocation of jmethodids in a tight
>> loop.
>> The issue can be addressed by preallocating enough space for all of the
>> jmethodids when starting the operation and not iterating over all of the
>> existing jmethodids when you allocate a new one.
>>
>> A patch is here:
>>
>> http://cr.openjdk.java.net/~jmanson/8062116/webrev.00/
>>
>> A reproducible test case can be found here:
>>
>> http://cr.openjdk.java.net/~jmanson/8062116/repro/
>>
>> It's a benchmark, though: I have no idea how to turn it into a test.
>>
>> For whoever reviews it: can you explain to me why it is okay that
>> this code
>> reuses jmethodIDs (in JNIMethodBlock::add_method? I can imagine a
>> lot of
>> problems stemming from accidental reuse.
>>
>> Jeremy
>
More information about the serviceability-dev
mailing list