Request for review, 6766644: Redefinition of compiled method fails with assertion "Can not load classes with the Compiler thread"
Kelly O'Hair
kelly.ohair at oracle.com
Tue Jan 25 11:44:54 PST 2011
On Jan 25, 2011, at 11:00 AM, Tom Rodriguez wrote:
>
> On Jan 25, 2011, at 8:49 AM, Keith McGuigan wrote:
>
>>
>> Hello,
>>
>> This code modifies the way that JVMTI compiled-method-load events
>> are posted. Previously, they were posted directly from the
>> compiler thread, which could cause issues if the JVMTI event
>> handling code made calls to RedefineClasses, since the compiler
>> thread is unable to load classes if that is required. This
>> solution is to defer the posting of the events to the Service
>> thread (formerly: LowMemoryDetector
>> thread) which is a Java thread and is able to load classes.
>
> The posting appears to be asynchronous which I don't think will
> work. The method could be unloaded or invalidated and freed before
> the event has been posted. It has to be done synchronously I think.
>
> I have a vague memory of someone saying that there were restrictions
> on what a JVMTI client was allowed to do in response to a
> CompiledMethodLoad but I can't find any evidence of that. So is
> that just a bogus memory or is there some restriction like this?
>
It's been a while now, but there are restrictions as to what a JVMTI
event handler can do, and I'm pretty sure redefining
classes may be on that limitation list, but I'm not seeing it
explicitly spelled out.
I see this:
http://download.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html#EventSection
It says "and the JVM TI implementation does not queue events in any
way".
And these compiled-method-load events can also be generated from this:
http://download.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html#GenerateEvents
And it mentions some issues with JNI.
Sorry, it's been so long, my serviceability brain cells have not been
maintained very well. :^(
-kto
> tom
>
>>
>> The "Service thread" now handles both low-memory detection and
>> JVMTI deferred event posting. I left the door open for other
>> types of events to be deferred and posted via this mechanism in
>> case we find other situations where posting events from a non-Java
>> thread causes problems.
>>
>> webrev: http://cr.openjdk.java.net/~kamg/6766644/webrev.01/
>>
>> --
>> - Keith
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20110125/7be49772/attachment.html
More information about the serviceability-dev
mailing list