--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp Wed Mar 12 13:02:47 2014 +0100
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp Fri Mar 14 10:15:46 2014 +0100
@@ -27,87 +27,32 @@
#include "gc_implementation/g1/heapRegionSet.hpp"
-//////////////////// HeapRegionSetBase ////////////////////
-
-inline void HeapRegionSetBase::update_for_addition(HeapRegion* hr) {
- // Assumes the caller has already verified the region.
-
- _length += 1;
- _region_num += hr->region_num();
- _total_used_bytes += hr->used();
-}
-
-inline void HeapRegionSetBase::add_internal(HeapRegion* hr) {
- hrs_assert_region_ok(this, hr, NULL);
+inline void HeapRegionSetBase::add(HeapRegion* hr) {
+ check_mt_safety();
+ assert(hr->containing_set() == NULL, hrs_ext_msg(this, "should not already have a containing set %u"));
assert(hr->next() == NULL, hrs_ext_msg(this, "should not already be linked"));
- update_for_addition(hr);
+ _count.increment(1u, hr->capacity());
hr->set_containing_set(this);
+ verify_region(hr);
}
-inline void HeapRegionSetBase::update_for_removal(HeapRegion* hr) {
- // Assumes the caller has already verified the region.
- assert(_length > 0, hrs_ext_msg(this, "pre-condition"));
- _length -= 1;
-
- uint region_num_diff = hr->region_num();
- assert(region_num_diff <= _region_num,
- hrs_err_msg("[%s] region's region num: %u "
- "should be <= region num: %u",
- name(), region_num_diff, _region_num));
- _region_num -= region_num_diff;
-
- size_t used_bytes = hr->used();
- assert(used_bytes <= _total_used_bytes,
- hrs_err_msg("[%s] region's used bytes: "SIZE_FORMAT" "
- "should be <= used bytes: "SIZE_FORMAT,
- name(), used_bytes, _total_used_bytes));
- _total_used_bytes -= used_bytes;
-}
-
-inline void HeapRegionSetBase::remove_internal(HeapRegion* hr) {
- hrs_assert_region_ok(this, hr, this);
+inline void HeapRegionSetBase::remove(HeapRegion* hr) {
+ check_mt_safety();
+ verify_region(hr);
assert(hr->next() == NULL, hrs_ext_msg(this, "should already be unlinked"));
hr->set_containing_set(NULL);
- update_for_removal(hr);
-}
-
-//////////////////// HeapRegionSet ////////////////////
-
-inline void HeapRegionSet::add(HeapRegion* hr) {
- hrs_assert_mt_safety_ok(this);
- // add_internal() will verify the region.
- add_internal(hr);
-}
-
-inline void HeapRegionSet::remove(HeapRegion* hr) {
- hrs_assert_mt_safety_ok(this);
- // remove_internal() will verify the region.
- remove_internal(hr);
+ assert(_count.length() > 0, hrs_ext_msg(this, "pre-condition"));
+ _count.decrement(1u, hr->capacity());
}
-inline void HeapRegionSet::remove_with_proxy(HeapRegion* hr,
- HeapRegionSet* proxy_set) {
- // No need to fo the MT safety check here given that this method
- // does not update the contents of the set but instead accumulates
- // the changes in proxy_set which is assumed to be thread-local.
- hrs_assert_sets_match(this, proxy_set);
- hrs_assert_region_ok(this, hr, this);
-
- hr->set_containing_set(NULL);
- proxy_set->update_for_addition(hr);
-}
-
-//////////////////// HeapRegionLinkedList ////////////////////
-
-inline void HeapRegionLinkedList::add_as_head(HeapRegion* hr) {
- hrs_assert_mt_safety_ok(this);
+inline void FreeRegionList::add_as_head(HeapRegion* hr) {
assert((length() == 0 && _head == NULL && _tail == NULL) ||
(length() > 0 && _head != NULL && _tail != NULL),
hrs_ext_msg(this, "invariant"));
- // add_internal() will verify the region.
- add_internal(hr);
+ // add() will verify the region and check mt safety.
+ add(hr);
// Now link the region.
if (_head != NULL) {
@@ -118,13 +63,13 @@
_head = hr;
}
-inline void HeapRegionLinkedList::add_as_tail(HeapRegion* hr) {
- hrs_assert_mt_safety_ok(this);
+inline void FreeRegionList::add_as_tail(HeapRegion* hr) {
+ check_mt_safety();
assert((length() == 0 && _head == NULL && _tail == NULL) ||
(length() > 0 && _head != NULL && _tail != NULL),
hrs_ext_msg(this, "invariant"));
- // add_internal() will verify the region.
- add_internal(hr);
+ // add() will verify the region and check mt safety
+ add(hr);
// Now link the region.
if (_tail != NULL) {
@@ -135,8 +80,7 @@
_tail = hr;
}
-inline HeapRegion* HeapRegionLinkedList::remove_head() {
- hrs_assert_mt_safety_ok(this);
+inline HeapRegion* FreeRegionList::remove_head() {
assert(!is_empty(), hrs_ext_msg(this, "the list should not be empty"));
assert(length() > 0 && _head != NULL && _tail != NULL,
hrs_ext_msg(this, "invariant"));
@@ -149,14 +93,13 @@
}
hr->set_next(NULL);
- // remove_internal() will verify the region.
- remove_internal(hr);
+ // remove() will verify the region and check mt safety
+ remove(hr);
return hr;
}
-inline HeapRegion* HeapRegionLinkedList::remove_head_or_null() {
- hrs_assert_mt_safety_ok(this);
-
+inline HeapRegion* FreeRegionList::remove_head_or_null() {
+ check_mt_safety();
if (!is_empty()) {
return remove_head();
} else {