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