src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp
Print this page
rev 5363 : imported patch filtering.diff
rev 5365 : [mq]: invalidate-fix
@@ -159,18 +159,22 @@
while (byte <= last_byte) {
*byte = dirty_card;
byte++;
}
} else {
+ // skip all consecutive young cards
+ for (; byte <= last_byte && *byte == g1_young_gen; byte++);
+
+ if (byte <= last_byte) {
+ OrderAccess::storeload();
// Enqueue if necessary.
if (thr->is_Java_thread()) {
JavaThread* jt = (JavaThread*)thr;
for (; byte <= last_byte; byte++) {
if (*byte == g1_young_gen) {
continue;
}
- OrderAccess::storeload();
if (*byte != dirty_card) {
*byte = dirty_card;
jt->dirty_card_queue().enqueue(byte);
}
}
@@ -179,14 +183,14 @@
Mutex::_no_safepoint_check_flag);
for (; byte <= last_byte; byte++) {
if (*byte == g1_young_gen) {
continue;
}
- OrderAccess::storeload();
if (*byte != dirty_card) {
*byte = dirty_card;
_dcqs.shared_dirty_card_queue()->enqueue(byte);
}
}
}
}
+ }
}