304 HeapWord* _prev_top_at_mark_start; |
304 HeapWord* _prev_top_at_mark_start; |
305 HeapWord* _next_top_at_mark_start; |
305 HeapWord* _next_top_at_mark_start; |
306 // If a collection pause is in progress, this is the top at the start |
306 // If a collection pause is in progress, this is the top at the start |
307 // of that pause. |
307 // of that pause. |
308 |
308 |
309 // We've counted the marked bytes of objects below here. |
|
310 HeapWord* _top_at_conc_mark_count; |
|
311 |
|
312 void init_top_at_mark_start() { |
309 void init_top_at_mark_start() { |
313 assert(_prev_marked_bytes == 0 && |
310 assert(_prev_marked_bytes == 0 && |
314 _next_marked_bytes == 0, |
311 _next_marked_bytes == 0, |
315 "Must be called after zero_marked_bytes."); |
312 "Must be called after zero_marked_bytes."); |
316 HeapWord* bot = bottom(); |
313 HeapWord* bot = bottom(); |
317 _prev_top_at_mark_start = bot; |
314 _prev_top_at_mark_start = bot; |
318 _next_top_at_mark_start = bot; |
315 _next_top_at_mark_start = bot; |
319 _top_at_conc_mark_count = bot; |
|
320 } |
316 } |
321 |
317 |
322 void set_young_type(YoungType new_type) { |
318 void set_young_type(YoungType new_type) { |
323 //assert(_young_type != new_type, "setting the same type" ); |
319 //assert(_young_type != new_type, "setting the same type" ); |
324 // TODO: add more assertions here |
320 // TODO: add more assertions here |
623 |
619 |
624 // Returns "false" iff no object in the region was allocated when the |
620 // Returns "false" iff no object in the region was allocated when the |
625 // last mark phase ended. |
621 // last mark phase ended. |
626 bool is_marked() { return _prev_top_at_mark_start != bottom(); } |
622 bool is_marked() { return _prev_top_at_mark_start != bottom(); } |
627 |
623 |
628 void init_top_at_conc_mark_count() { |
|
629 _top_at_conc_mark_count = bottom(); |
|
630 } |
|
631 |
|
632 void set_top_at_conc_mark_count(HeapWord *cur) { |
|
633 assert(bottom() <= cur && cur <= end(), "Sanity."); |
|
634 _top_at_conc_mark_count = cur; |
|
635 } |
|
636 |
|
637 HeapWord* top_at_conc_mark_count() { |
|
638 return _top_at_conc_mark_count; |
|
639 } |
|
640 |
|
641 void reset_during_compaction() { |
624 void reset_during_compaction() { |
642 guarantee( isHumongous() && startsHumongous(), |
625 guarantee( isHumongous() && startsHumongous(), |
643 "should only be called for humongous regions"); |
626 "should only be called for humongous regions"); |
644 |
627 |
645 zero_marked_bytes(); |
628 zero_marked_bytes(); |
731 // Sets the "evacuation_failed" property of the region. |
714 // Sets the "evacuation_failed" property of the region. |
732 void set_evacuation_failed(bool b) { |
715 void set_evacuation_failed(bool b) { |
733 _evacuation_failed = b; |
716 _evacuation_failed = b; |
734 |
717 |
735 if (b) { |
718 if (b) { |
736 init_top_at_conc_mark_count(); |
|
737 _next_marked_bytes = 0; |
719 _next_marked_bytes = 0; |
738 } |
720 } |
739 } |
721 } |
740 |
722 |
741 // Requires that "mr" be entirely within the region. |
723 // Requires that "mr" be entirely within the region. |