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