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