src/share/vm/services/memSnapshot.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/services/memSnapshot.cpp
src/share/vm/services/memSnapshot.cpp
Print this page
*** 260,276 ****
assert(rec->is_deallocation_record(), "Sanity check");
VMMemRegion* cur = (VMMemRegion*)current();
assert(cur->is_reserved_region() && cur->contains_region(rec),
"Sanity check");
if (rec->is_same_region(cur)) {
! // release whole reserved region
#ifdef ASSERT
! VMMemRegion* next_region = (VMMemRegion*)peek_next();
! // should not have any committed memory in this reserved region
! assert(next_region == NULL || !next_region->is_committed_region(), "Sanity check");
#endif
remove();
} else if (rec->addr() == cur->addr() ||
rec->addr() + rec->size() == cur->addr() + cur->size()) {
// released region is at either end of this region
cur->exclude_region(rec->addr(), rec->size());
assert(check_reserved_region(), "Integrity check");
--- 260,284 ----
assert(rec->is_deallocation_record(), "Sanity check");
VMMemRegion* cur = (VMMemRegion*)current();
assert(cur->is_reserved_region() && cur->contains_region(rec),
"Sanity check");
if (rec->is_same_region(cur)) {
! // release whole reserved region and all committed regions within the reserved region
#ifdef ASSERT
! address low_addr = cur->addr();
! address high_addr = low_addr + cur->size();
#endif
remove();
+ // remove committed regions within the reserved region
+ VMMemRegion* next_region = (VMMemRegion*)current();
+ while (next_region != NULL && next_region->is_committed_region()) {
+ assert(next_region->addr() >= low_addr &&
+ next_region->addr() + next_region->size() <= high_addr,
+ "Range check");
+ remove();
+ next_region = (VMMemRegion*)current();
+ }
} else if (rec->addr() == cur->addr() ||
rec->addr() + rec->size() == cur->addr() + cur->size()) {
// released region is at either end of this region
cur->exclude_region(rec->addr(), rec->size());
assert(check_reserved_region(), "Integrity check");
src/share/vm/services/memSnapshot.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File