65 Old = 2, // The region is in the collection set and an old region. |
65 Old = 2, // The region is in the collection set and an old region. |
66 Num |
66 Num |
67 }; |
67 }; |
68 |
68 |
69 InCSetState(in_cset_state_t value = NotInCSet) : _value(value) { |
69 InCSetState(in_cset_state_t value = NotInCSet) : _value(value) { |
70 assert(is_valid(), err_msg("Invalid state %d", _value)); |
70 assert(is_valid(), "Invalid state %d", _value); |
71 } |
71 } |
72 |
72 |
73 in_cset_state_t value() const { return _value; } |
73 in_cset_state_t value() const { return _value; } |
74 |
74 |
75 void set_old() { _value = Old; } |
75 void set_old() { _value = Old; } |
102 protected: |
102 protected: |
103 InCSetState default_value() const { return InCSetState::NotInCSet; } |
103 InCSetState default_value() const { return InCSetState::NotInCSet; } |
104 public: |
104 public: |
105 void set_humongous(uintptr_t index) { |
105 void set_humongous(uintptr_t index) { |
106 assert(get_by_index(index).is_default(), |
106 assert(get_by_index(index).is_default(), |
107 err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); |
107 "State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value()); |
108 set_by_index(index, InCSetState::Humongous); |
108 set_by_index(index, InCSetState::Humongous); |
109 } |
109 } |
110 |
110 |
111 void clear_humongous(uintptr_t index) { |
111 void clear_humongous(uintptr_t index) { |
112 set_by_index(index, InCSetState::NotInCSet); |
112 set_by_index(index, InCSetState::NotInCSet); |
113 } |
113 } |
114 |
114 |
115 void set_in_young(uintptr_t index) { |
115 void set_in_young(uintptr_t index) { |
116 assert(get_by_index(index).is_default(), |
116 assert(get_by_index(index).is_default(), |
117 err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); |
117 "State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value()); |
118 set_by_index(index, InCSetState::Young); |
118 set_by_index(index, InCSetState::Young); |
119 } |
119 } |
120 |
120 |
121 void set_in_old(uintptr_t index) { |
121 void set_in_old(uintptr_t index) { |
122 assert(get_by_index(index).is_default(), |
122 assert(get_by_index(index).is_default(), |
123 err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); |
123 "State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value()); |
124 set_by_index(index, InCSetState::Old); |
124 set_by_index(index, InCSetState::Old); |
125 } |
125 } |
126 |
126 |
127 bool is_in_cset_or_humongous(HeapWord* addr) const { return at(addr).is_in_cset_or_humongous(); } |
127 bool is_in_cset_or_humongous(HeapWord* addr) const { return at(addr).is_in_cset_or_humongous(); } |
128 bool is_in_cset(HeapWord* addr) const { return at(addr).is_in_cset(); } |
128 bool is_in_cset(HeapWord* addr) const { return at(addr).is_in_cset(); } |