# HG changeset patch # User pliden # Date 1400574270 -7200 # Node ID 6a0ad297791984e3d0794c3a87b97edc248d3751 # Parent 8a140676873f3f91ecec53e0e2c2d518006f5e1a 8039042: G1: Phantom zeros in cardtable Reviewed-by: tschatzl, mgerdin diff -r 8a140676873f -r 6a0ad2977919 src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp --- a/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Wed May 14 14:32:23 2014 +0200 +++ b/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Tue May 20 10:24:30 2014 +0200 @@ -95,7 +95,15 @@ jbyte *const first = byte_for(mr.start()); jbyte *const last = byte_after(mr.last()); - memset(first, g1_young_gen, last - first); + // 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