comparison src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp @ 12343:d55c004e1d4d

8025305: Cleanup CardTableModRefBS usage in G1 Summary: Move some G1 specific code from CardTableModRefBS to G1SATBCardTableModRefBS. Reviewed-by: brutisso, tschatzl, ehelin
author mgerdin
date Tue, 24 Sep 2013 14:46:29 +0200
parents b30744960351
children 798522662fcd 69944b868a32
comparison
equal deleted inserted replaced
12342:ccef6e165e8b 12343:d55c004e1d4d
60 T heap_oop = oopDesc::load_heap_oop(elem_ptr); 60 T heap_oop = oopDesc::load_heap_oop(elem_ptr);
61 if (!oopDesc::is_null(heap_oop)) { 61 if (!oopDesc::is_null(heap_oop)) {
62 enqueue(oopDesc::decode_heap_oop_not_null(heap_oop)); 62 enqueue(oopDesc::decode_heap_oop_not_null(heap_oop));
63 } 63 }
64 } 64 }
65 }
66
67 bool G1SATBCardTableModRefBS::mark_card_deferred(size_t card_index) {
68 jbyte val = _byte_map[card_index];
69 // It's already processed
70 if ((val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val()) {
71 return false;
72 }
73 // Cached bit can be installed either on a clean card or on a claimed card.
74 jbyte new_val = val;
75 if (val == clean_card_val()) {
76 new_val = (jbyte)deferred_card_val();
77 } else {
78 if (val & claimed_card_val()) {
79 new_val = val | (jbyte)deferred_card_val();
80 }
81 }
82 if (new_val != val) {
83 Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
84 }
85 return true;
65 } 86 }
66 87
67 G1SATBCardTableLoggingModRefBS:: 88 G1SATBCardTableLoggingModRefBS::
68 G1SATBCardTableLoggingModRefBS(MemRegion whole_heap, 89 G1SATBCardTableLoggingModRefBS(MemRegion whole_heap,
69 int max_covered_regions) : 90 int max_covered_regions) :