RFR(S): 8047812: Ensure ClassLoaderDataGraph::classes_unloading_do only delivers klasses from CLDs with non-reclaimed class loader oops
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Tue Jun 24 07:58:37 UTC 2014
Hi Markus,
I'm Ok with the "_saved_unloading" if you prefer it.
Thanks!
Serguei
On 6/24/14 12:49 AM, Markus Grönlund wrote:
> Hi Serguei,
>
> Thanks for taking a look and coming up with some suggestions on renaming the field.
>
> In regards to naming, I have followed the existing pattern for CMS support (see "_saved_head" field).
>
> As always on naming, I think it depends on which perspective you take: if you take the view of an outside consumer of the iterator function, then maybe "_processed_unloading" might be a useful name for the file (but this only as "processed" in regards to "delivered via callbacks" sense of the term).
>
> But, if we take the GC centric view (which this does since it add specialization for CMS GC), then the list is "saved" for by each GC thread enter until the point of purging. We have still not really reached the point where the rationale for this list (_unloading) in used - and that is during "purge" where all the CLDs reachable via the _unloading list are deallocated.
>
> So the other candidate I would consider would be something like "_previous_unloading", but this is close enough to "_saved_unloading".
>
> For these reasons I would suggest going with "_saved_unloading".
>
> Thanks for the suggestions though.
>
> /Markus
>
>
> -----Original Message-----
> From: Serguei Spitsyn
> Sent: den 24 juni 2014 02:20
> To: Markus Grönlund; hotspot-runtime-dev; serviceability-dev
> Subject: Re: RFR(S): 8047812: Ensure ClassLoaderDataGraph::classes_unloading_do only delivers klasses from CLDs with non-reclaimed class loader oops
>
> Markus,
>
> It looks correct in general and the comments are good.
>
> However, it makes it a little bit more complex.
> I'd suggest to rename the "_saved_unloading" to something more meaningful.
> What about "_iterated_unloading", "_processed_unloading" or "_posted_unloading" ?
> No pressure, just some thinking. :)
>
> Thanks,
> Serguei
>
> On 6/23/14 8:02 AM, Markus Grönlund wrote:
>> Greetings,
>>
>>
>>
>> Kindly asking for reviews for the following change:
>>
>>
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8047812
>>
>> Webrev: http://cr.openjdk.java.net/~mgronlun/8047812/webrev01
>>
>>
>>
>> Description:
>>
>> The "8038212: Method::is_valid_method() check has performance regression
>> impact for stackwalking" - changeset introduced a change in how the ClassLoaderDataGraph::_unloading list of ClassLoaderData's is purged.
>>
>> This change to the purging of the CLD's work the same as before for most GC's, but when using CMS GC, SystemDictionary::do_unloading() is called twice with no explicit purge call in between. On the second call (post-sweep), we can now get stale class loader oops delivered as part of the Klass closure callbacks from the _unloading list. Again, this is because there is no explicit purge call in between these two entries to SystemDictionary::do_unloading() - and being CMS and concurrent, it is very hard to accommodate a timely and proper purge call here.
>>
>> The first do_unloading call comes after CMS concurrent marking, and the second comes from a Full GC triggered while sweeping the CMS heap.
>>
>> This fix ensures the unloading purge mechanism to work correctly also for the CMS collector, in that only CLDs with non-reclaimed class loader oops will deliver klasses from the _unloading list. In addition, this will ensure a single "logical" pass is achieved when iterating the unloading list in-between purges (avoiding the processing of the same data twice).
>>
>> This fix is precipitated by nightly testing failures with CMS after the introduction of 8038212: Method::is_valid_method() check has performance regression
>> impact for stackwalking" - for example "nsk/sysdict/vm/stress/jck12a//sysdictj12a008" which is crashing because of following up stale klass loader oop's from the ClassLoaderDataGraph::_unloading list.
>>
>>
>>
>> Thanks
>>
>> Markus
More information about the serviceability-dev
mailing list