Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/heapRegion.hpp @ 6254:a2f7274eb6ef
7114678: G1: various small fixes, code cleanup, and refactoring
Summary: Various cleanups as a prelude to introducing iterators for HeapRegions.
Reviewed-by: johnc, brutisso
author | tonyp |
---|---|
date | Thu, 19 Jul 2012 15:15:54 -0700 |
parents | 8a2e5a6a19a4 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6253:db823a892a55 | 6254:a2f7274eb6ef |
---|---|
53 class HeapRegionSetBase; | 53 class HeapRegionSetBase; |
54 | 54 |
55 #define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]" | 55 #define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]" |
56 #define HR_FORMAT_PARAMS(_hr_) \ | 56 #define HR_FORMAT_PARAMS(_hr_) \ |
57 (_hr_)->hrs_index(), \ | 57 (_hr_)->hrs_index(), \ |
58 (_hr_)->is_survivor() ? "S" : (_hr_)->is_young() ? "E" : "-", \ | 58 (_hr_)->is_survivor() ? "S" : (_hr_)->is_young() ? "E" : \ |
59 (_hr_)->startsHumongous() ? "HS" : \ | |
60 (_hr_)->continuesHumongous() ? "HC" : \ | |
61 !(_hr_)->is_empty() ? "O" : "F", \ | |
59 (_hr_)->bottom(), (_hr_)->top(), (_hr_)->end() | 62 (_hr_)->bottom(), (_hr_)->top(), (_hr_)->end() |
60 | 63 |
61 // sentinel value for hrs_index | 64 // sentinel value for hrs_index |
62 #define G1_NULL_HRS_INDEX ((uint) -1) | 65 #define G1_NULL_HRS_INDEX ((uint) -1) |
63 | 66 |
171 void set_end(HeapWord* value); | 174 void set_end(HeapWord* value); |
172 | 175 |
173 virtual HeapWord* saved_mark_word() const; | 176 virtual HeapWord* saved_mark_word() const; |
174 virtual void set_saved_mark(); | 177 virtual void set_saved_mark(); |
175 void reset_gc_time_stamp() { _gc_time_stamp = 0; } | 178 void reset_gc_time_stamp() { _gc_time_stamp = 0; } |
179 unsigned get_gc_time_stamp() { return _gc_time_stamp; } | |
176 | 180 |
177 // See the comment above in the declaration of _pre_dummy_top for an | 181 // See the comment above in the declaration of _pre_dummy_top for an |
178 // explanation of what it is. | 182 // explanation of what it is. |
179 void set_pre_dummy_top(HeapWord* pre_dummy_top) { | 183 void set_pre_dummy_top(HeapWord* pre_dummy_top) { |
180 assert(is_in(pre_dummy_top) && pre_dummy_top <= top(), "pre-condition"); | 184 assert(is_in(pre_dummy_top) && pre_dummy_top <= top(), "pre-condition"); |
435 bool startsHumongous() const { return _humongous_type == StartsHumongous; } | 439 bool startsHumongous() const { return _humongous_type == StartsHumongous; } |
436 bool continuesHumongous() const { return _humongous_type == ContinuesHumongous; } | 440 bool continuesHumongous() const { return _humongous_type == ContinuesHumongous; } |
437 // For a humongous region, region in which it starts. | 441 // For a humongous region, region in which it starts. |
438 HeapRegion* humongous_start_region() const { | 442 HeapRegion* humongous_start_region() const { |
439 return _humongous_start_region; | 443 return _humongous_start_region; |
444 } | |
445 | |
446 // Return the number of distinct regions that are covered by this region: | |
447 // 1 if the region is not humongous, >= 1 if the region is humongous. | |
448 uint region_num() const { | |
449 if (!isHumongous()) { | |
450 return 1U; | |
451 } else { | |
452 assert(startsHumongous(), "doesn't make sense on HC regions"); | |
453 assert(capacity() % HeapRegion::GrainBytes == 0, "sanity"); | |
454 return (uint) (capacity() >> HeapRegion::LogOfHRGrainBytes); | |
455 } | |
456 } | |
457 | |
458 // Return the index + 1 of the last HC regions that's associated | |
459 // with this HS region. | |
460 uint last_hc_index() const { | |
461 assert(startsHumongous(), "don't call this otherwise"); | |
462 return hrs_index() + region_num(); | |
440 } | 463 } |
441 | 464 |
442 // Same as Space::is_in_reserved, but will use the original size of the region. | 465 // Same as Space::is_in_reserved, but will use the original size of the region. |
443 // The original size is different only for start humongous regions. They get | 466 // The original size is different only for start humongous regions. They get |
444 // their _end set up to be the end of the last continues region of the | 467 // their _end set up to be the end of the last continues region of the |
620 // Returns "false" iff no object in the region was allocated when the | 643 // Returns "false" iff no object in the region was allocated when the |
621 // last mark phase ended. | 644 // last mark phase ended. |
622 bool is_marked() { return _prev_top_at_mark_start != bottom(); } | 645 bool is_marked() { return _prev_top_at_mark_start != bottom(); } |
623 | 646 |
624 void reset_during_compaction() { | 647 void reset_during_compaction() { |
625 guarantee( isHumongous() && startsHumongous(), | 648 assert(isHumongous() && startsHumongous(), |
626 "should only be called for humongous regions"); | 649 "should only be called for starts humongous regions"); |
627 | 650 |
628 zero_marked_bytes(); | 651 zero_marked_bytes(); |
629 init_top_at_mark_start(); | 652 init_top_at_mark_start(); |
630 } | 653 } |
631 | 654 |
772 | 795 |
773 #define HeapRegion_OOP_SINCE_SAVE_MARKS_DECL(OopClosureType, nv_suffix) \ | 796 #define HeapRegion_OOP_SINCE_SAVE_MARKS_DECL(OopClosureType, nv_suffix) \ |
774 virtual void oop_since_save_marks_iterate##nv_suffix(OopClosureType* cl); | 797 virtual void oop_since_save_marks_iterate##nv_suffix(OopClosureType* cl); |
775 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DECL) | 798 SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DECL) |
776 | 799 |
777 CompactibleSpace* next_compaction_space() const; | 800 virtual CompactibleSpace* next_compaction_space() const; |
778 | 801 |
779 virtual void reset_after_compaction(); | 802 virtual void reset_after_compaction(); |
780 | 803 |
781 void print() const; | 804 void print() const; |
782 void print_on(outputStream* st) const; | 805 void print_on(outputStream* st) const; |