--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Tue Jul 17 12:24:05 2012 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Jul 19 15:15:54 2012 -0700
@@ -55,7 +55,10 @@
#define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
#define HR_FORMAT_PARAMS(_hr_) \
(_hr_)->hrs_index(), \
- (_hr_)->is_survivor() ? "S" : (_hr_)->is_young() ? "E" : "-", \
+ (_hr_)->is_survivor() ? "S" : (_hr_)->is_young() ? "E" : \
+ (_hr_)->startsHumongous() ? "HS" : \
+ (_hr_)->continuesHumongous() ? "HC" : \
+ !(_hr_)->is_empty() ? "O" : "F", \
(_hr_)->bottom(), (_hr_)->top(), (_hr_)->end()
// sentinel value for hrs_index
@@ -173,6 +176,7 @@
virtual HeapWord* saved_mark_word() const;
virtual void set_saved_mark();
void reset_gc_time_stamp() { _gc_time_stamp = 0; }
+ unsigned get_gc_time_stamp() { return _gc_time_stamp; }
// See the comment above in the declaration of _pre_dummy_top for an
// explanation of what it is.
@@ -439,6 +443,25 @@
return _humongous_start_region;
}
+ // Return the number of distinct regions that are covered by this region:
+ // 1 if the region is not humongous, >= 1 if the region is humongous.
+ uint region_num() const {
+ if (!isHumongous()) {
+ return 1U;
+ } else {
+ assert(startsHumongous(), "doesn't make sense on HC regions");
+ assert(capacity() % HeapRegion::GrainBytes == 0, "sanity");
+ return (uint) (capacity() >> HeapRegion::LogOfHRGrainBytes);
+ }
+ }
+
+ // Return the index + 1 of the last HC regions that's associated
+ // with this HS region.
+ uint last_hc_index() const {
+ assert(startsHumongous(), "don't call this otherwise");
+ return hrs_index() + region_num();
+ }
+
// Same as Space::is_in_reserved, but will use the original size of the region.
// The original size is different only for start humongous regions. They get
// their _end set up to be the end of the last continues region of the
@@ -622,8 +645,8 @@
bool is_marked() { return _prev_top_at_mark_start != bottom(); }
void reset_during_compaction() {
- guarantee( isHumongous() && startsHumongous(),
- "should only be called for humongous regions");
+ assert(isHumongous() && startsHumongous(),
+ "should only be called for starts humongous regions");
zero_marked_bytes();
init_top_at_mark_start();
@@ -774,7 +797,7 @@
virtual void oop_since_save_marks_iterate##nv_suffix(OopClosureType* cl);
SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DECL)
- CompactibleSpace* next_compaction_space() const;
+ virtual CompactibleSpace* next_compaction_space() const;
virtual void reset_after_compaction();