RFR: 8227175: ZGC: ZHeapIterator visits potentially dead objects

Stefan Karlsson stefan.karlsson at oracle.com
Wed Jul 3 13:31:27 UTC 2019


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