87 virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized) { |
87 virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized) { |
88 if (!dest_uninitialized) { |
88 if (!dest_uninitialized) { |
89 write_ref_array_pre_work(dst, count); |
89 write_ref_array_pre_work(dst, count); |
90 } |
90 } |
91 } |
91 } |
|
92 |
|
93 /* |
|
94 Claimed and deferred bits are used together in G1 during the evacuation |
|
95 pause. These bits can have the following state transitions: |
|
96 1. The claimed bit can be put over any other card state. Except that |
|
97 the "dirty -> dirty and claimed" transition is checked for in |
|
98 G1 code and is not used. |
|
99 2. Deferred bit can be set only if the previous state of the card |
|
100 was either clean or claimed. mark_card_deferred() is wait-free. |
|
101 We do not care if the operation is be successful because if |
|
102 it does not it will only result in duplicate entry in the update |
|
103 buffer because of the "cache-miss". So it's not worth spinning. |
|
104 */ |
|
105 |
|
106 bool is_card_claimed(size_t card_index) { |
|
107 jbyte val = _byte_map[card_index]; |
|
108 return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val(); |
|
109 } |
|
110 |
|
111 void set_card_claimed(size_t card_index) { |
|
112 jbyte val = _byte_map[card_index]; |
|
113 if (val == clean_card_val()) { |
|
114 val = (jbyte)claimed_card_val(); |
|
115 } else { |
|
116 val |= (jbyte)claimed_card_val(); |
|
117 } |
|
118 _byte_map[card_index] = val; |
|
119 } |
|
120 |
|
121 bool mark_card_deferred(size_t card_index); |
|
122 |
|
123 bool is_card_deferred(size_t card_index) { |
|
124 jbyte val = _byte_map[card_index]; |
|
125 return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val(); |
|
126 } |
|
127 |
92 }; |
128 }; |
93 |
129 |
94 // Adds card-table logging to the post-barrier. |
130 // Adds card-table logging to the post-barrier. |
95 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet. |
131 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet. |
96 class G1SATBCardTableLoggingModRefBS: public G1SATBCardTableModRefBS { |
132 class G1SATBCardTableLoggingModRefBS: public G1SATBCardTableModRefBS { |