RFR: 8227175: ZGC: ZHeapIterator visits potentially dead objects
Zhengyu Gu
zgu at redhat.com
Wed Jul 3 14:03:43 UTC 2019
Hi Stefan,
Runtime part looks good to me.
I had the same thoughts when moving Shenandoah CLDG evacuation to
concurrent phase, then heap dump started to interfere concurrent CLDG
iteration. Because Shenandoah heap dump uses single-thread to walk CLDG,
we used _claimed_none to avoid the problem. The change can potentially
allow us to relax the restriction.
Thanks,
-Zhengyu
On 7/3/19 9:31 AM, Stefan Karlsson wrote:
> Hi all,
>
> (Sending this RFR to hotspot-dev since it changes CLD claiming.)
>
> Please review this patch to fix the ZHeapIterator to not visit
> potentially dead objects.
>
> https://cr.openjdk.java.net/~stefank/8227175/
> https://bugs.openjdk.java.net/browse/JDK-8227175
>
> It changes how all heap iterations are done in ZGC. Previously, the
> marking code visited only the strong CLDs and traced through metadata to
> find all other CLDs that should be considered alive. The verification
> code, serviceability heap iterations, and marking without class
> unloading, skipped the metadata tracing part and visited all CLDs
> instead. Now, with this patch, all these heap iterations starts with the
> strong CLDs and trace through the object graph.
>
> One complication with that scheme is that non-GC heap iterations might
> be executing after concurrent marking has started, but before dead CLDs
> have been unlinked. To allow the GC marking code and one, at a time,
> non-GC heap iteration to run at the same time, I've introduced a new
> claim bit in the CLD claiming byte. I've called it "other", so now we
> have "strong", "finalizable", and "other". The contract is that the
> "other" bits should only be used in a safepoint operation, and must be
> cleared before the operation ends. This way we get mutual exclusion
> between different users of the "other" bits.
>
> The patch also adds more precise verification of ZGC references.
>
> This patch was written a few weeks ago to make the verification of ZGC
> references more precise. I've been using it since then to get better
> verification of other patches and when hunting for bugs. This means I've
> been running it through tier 1-7 multiple times. The intent was to get
> this pushed to JDK 14, but now that we've seen that we have an actual
> bug because of the imprecise nature of the ZHeapIterator, I'd like to
> get this patch pushed to JDK 13. We considered trying to split this up
> into two parts, the first part that fixes the heap iterations and the
> second part that adds the extra ZGC verification, but we thing that
> would take longer time and be riskier.
>
> Thanks,
> StefanK
More information about the hotspot-dev
mailing list