76 // No point in asserting barrier set type here. Need to make CardTableExtension |
76 // No point in asserting barrier set type here. Need to make CardTableExtension |
77 // a unique barrier set type. |
77 // a unique barrier set type. |
78 } |
78 } |
79 |
79 |
80 // Card marks are not precise. The current system can leave us with |
80 // Card marks are not precise. The current system can leave us with |
81 // a mismash of precise marks and begining of object marks. This means |
81 // a mismash of precise marks and beginning of object marks. This means |
82 // we test for missing precise marks first. If any are found, we don't |
82 // we test for missing precise marks first. If any are found, we don't |
83 // fail unless the object head is also unmarked. |
83 // fail unless the object head is also unmarked. |
84 virtual void do_object(oop obj) { |
84 virtual void do_object(oop obj) { |
85 CheckForUnmarkedOops object_check(_young_gen, _card_table); |
85 CheckForUnmarkedOops object_check(_young_gen, _card_table); |
86 obj->oop_iterate(&object_check); |
86 obj->oop_iterate(&object_check); |
256 |
256 |
257 // If there are not objects starting within the chunk, skip it. |
257 // If there are not objects starting within the chunk, skip it. |
258 if (!start_array->object_starts_in_range(slice_start, slice_end)) { |
258 if (!start_array->object_starts_in_range(slice_start, slice_end)) { |
259 continue; |
259 continue; |
260 } |
260 } |
261 // Update our begining addr |
261 // Update our beginning addr |
262 HeapWord* first_object = start_array->object_start(slice_start); |
262 HeapWord* first_object = start_array->object_start(slice_start); |
263 debug_only(oop* first_object_within_slice = (oop*) first_object;) |
263 debug_only(oop* first_object_within_slice = (oop*) first_object;) |
264 if (first_object < slice_start) { |
264 if (first_object < slice_start) { |
265 last_scanned = (oop*)(first_object + oop(first_object)->size()); |
265 last_scanned = (oop*)(first_object + oop(first_object)->size()); |
266 debug_only(first_object_within_slice = last_scanned;) |
266 debug_only(first_object_within_slice = last_scanned;) |