Review request (M): 8003720: NPG: Method in interpreter stack frame can be deallocated
Stefan Karlsson
stefan.karlsson at oracle.com
Tue Nov 27 01:12:03 PST 2012
On 11/26/2012 03:55 PM, Coleen Phillimore wrote:
> Looks fine from the runtime code.
Thanks.
> Someone from GC will have to review the GC code.
John Coomes has now reviewed this, so I'm going to push this.
thanks,
StefanK
> thanks,
> Coleen
>
> On 11/22/2012 9:14 AM, Stefan Karlsson wrote:
>> http://cr.openjdk.java.net/~stefank/8003720/webrev/
>>
>> Description from CR:
>> In virtual calls the Method pointer in the interpreter stack frame is
>> not kept alive by anything other than the "this" pointers to that
>> method. If bytecodes overwrite the "this" pointer, then call a full
>> GC, the class loader containing the Method* can be unloaded and the
>> Method* deallocated.
>>
>> This is also a problem with JSR292 MethodHandle static code because
>> the MethodHandle containing the mirror for the interpreted method
>> Method* is not on the stack if a GC occurs.
>>
>> Fix proposal:
>> The "obvious" solution to this problem would be to apply the root
>> scanning OopClosure to the Klass::_java_mirror field of the method in
>> the interpreted frame. However, doing this might cause us to scan the
>> same metadata oop location more than once, which is not allowed by
>> some of the HotSpot GCs. We currently solve similar situations by
>> always "claiming" and start scanning from the ClassLoaderData and
>> then proceed down into the Klasses of that class loader.
>>
>> For this bug we do the same. All old collections, where class
>> unloading can occur, pass down a closure that is applied to the
>> ClassLoaderData of the Klass of the Method in the interpreted frame.
>> This closure does the claiming and proceeds to scan the class
>> metadata. Note that during young collections, where we don't do class
>> unloading, all classes are already used as strong roots and we don't
>> have to apply this new closure in the interpreted frame.
>>
>> Testing:
>> The added test was initially written by John Rose. I only ported it
>> to JTreg and made some artistic cleanups to it.
>>
>> thanks,
>> StefanK
>
More information about the hotspot-dev
mailing list