RFR: 8227175: ZGC: ZHeapIterator visits potentially dead objects
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Jul 4 09:48:53 UTC 2019
Thanks for reviewing!
StefanK
On 2019-07-03 16:03, Zhengyu Gu wrote:
> 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