< prev index next >
src/hotspot/share/gc/g1/heapRegionSet.inline.hpp
Print this page
rev 56821 : imported patch 8220310.mut.0
rev 56822 : imported patch 8220310.mut.1
rev 56823 : imported patch 8220310.mut.2
rev 56824 : imported patch 8220310.mut.3
rev 56825 : imported patch 8220310.mut.4
rev 56834 : imported patch 8220312.stat.2
rev 56836 : imported patch 8220312.stat.4
rev 56838 : [mq]: 8220312.stat.5
*** 93,102 ****
--- 93,104 ----
// The list was empty
_tail = hr;
_head = hr;
}
_last = hr;
+
+ increase_length(hr->node_index());
}
inline HeapRegion* FreeRegionList::remove_from_head_impl() {
HeapRegion* result = _head;
_head = result->next();
*** 143,158 ****
_last = NULL;
}
// remove() will verify the region and check mt safety.
remove(hr);
return hr;
}
inline HeapRegion* FreeRegionList::remove_region_with_node_index(bool from_head,
! const uint requested_node_index,
! uint* allocated_node_index) {
assert(UseNUMA, "Invariant");
const uint max_search_depth = G1NUMA::numa()->max_search_depth();
HeapRegion* cur;
--- 145,162 ----
_last = NULL;
}
// remove() will verify the region and check mt safety.
remove(hr);
+
+ decrease_length(hr->node_index());
+
return hr;
}
inline HeapRegion* FreeRegionList::remove_region_with_node_index(bool from_head,
! uint requested_node_index) {
assert(UseNUMA, "Invariant");
const uint max_search_depth = G1NUMA::numa()->max_search_depth();
HeapRegion* cur;
*** 200,212 ****
if (_last == cur) {
_last = NULL;
}
remove(cur);
! if (allocated_node_index != NULL) {
! *allocated_node_index = cur->node_index();
! }
return cur;
}
#endif // SHARE_GC_G1_HEAPREGIONSET_INLINE_HPP
--- 204,253 ----
if (_last == cur) {
_last = NULL;
}
remove(cur);
! decrease_length(cur->node_index());
return cur;
}
+ inline void FreeRegionList::NodeInfo::increase_length(uint node_index) {
+ if (node_index < _num_nodes) {
+ _length_of_node[node_index] += 1;
+ }
+ }
+
+ inline void FreeRegionList::NodeInfo::decrease_length(uint node_index) {
+ if (node_index < _num_nodes) {
+ assert(_length_of_node[node_index] > 0,
+ "Current length %u should be greater than zero for node %u",
+ _length_of_node[node_index], node_index);
+ _length_of_node[node_index] -= 1;
+ }
+ }
+
+ inline uint FreeRegionList::NodeInfo::length(uint node_index) const {
+ return _length_of_node[node_index];
+ }
+
+ inline void FreeRegionList::increase_length(uint node_index) {
+ if (_node_info != NULL) {
+ return _node_info->increase_length(node_index);
+ }
+ }
+
+ inline void FreeRegionList::decrease_length(uint node_index) {
+ if (_node_info != NULL) {
+ return _node_info->decrease_length(node_index);
+ }
+ }
+
+ inline uint FreeRegionList::length(uint node_index) const {
+ if (_node_info != NULL) {
+ return _node_info->length(node_index);
+ } else {
+ return 0;
+ }
+ }
+
#endif // SHARE_GC_G1_HEAPREGIONSET_INLINE_HPP
< prev index next >