< prev index next >

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

Print this page
rev 8796 : imported patch usenewfun

*** 25,34 **** --- 25,35 ---- #include "precompiled.hpp" #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1SATBCardTableModRefBS.hpp" #include "gc/g1/heapRegion.hpp" #include "gc/g1/satbQueue.hpp" + #include "gc/shared/memset_with_concurrent_readers.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/orderAccess.inline.hpp" #include "runtime/thread.inline.hpp"
*** 106,124 **** 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); --- 107,117 ---- void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) { jbyte *const first = byte_for(mr.start()); jbyte *const last = byte_after(mr.last()); ! memset_with_concurrent_readers(first, g1_young_gen, last - first); } #ifndef PRODUCT void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) { verify_region(mr, g1_young_gen, true);
< prev index next >