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);