src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp

Print this page
rev 6413 : 8039042: G1: Phantom zeros in cardtable
Reviewed-by: TBD

@@ -94,11 +94,19 @@
 
 void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) {
   jbyte *const first = byte_for(mr.start());
   jbyte *const last = byte_after(mr.last());
 
+  // Below we may use an explicit loop instead of memset() because on
+  // certain platforms memset() can give concurrent readers phantom zeros.
+  if (UseMemSetInBOT) {
   memset(first, g1_young_gen, last - first);
+  } else {
+    for (jbyte* i = first; i < last; i++) {
+      *i = g1_young_gen;
+    }
+  }
 }
 
 #ifndef PRODUCT
 void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) {
   verify_region(mr, g1_young_gen,  true);