< prev index next >
src/hotspot/share/services/virtualMemoryTracker.cpp
Print this page
*** 63,79 ****
if (rgn->same_region(addr, size)) {
return true;
}
if (rgn->adjacent_to(addr, size)) {
! // special case to expand prior region if there is no next region
! LinkedListNode<CommittedMemoryRegion>* next = node->next();
! if (next == NULL && rgn->call_stack()->equals(stack)) {
! VirtualMemorySummary::record_uncommitted_memory(rgn->size(), flag());
// the two adjacent regions have the same call stack, merge them
rgn->expand_region(addr, size);
! VirtualMemorySummary::record_committed_memory(rgn->size(), flag());
return true;
}
}
if (rgn->overlap_region(addr, size)) {
--- 63,89 ----
if (rgn->same_region(addr, size)) {
return true;
}
if (rgn->adjacent_to(addr, size)) {
! if (rgn->call_stack()->equals(stack)) {
// the two adjacent regions have the same call stack, merge them
rgn->expand_region(addr, size);
! VirtualMemorySummary::record_committed_memory(size, flag());
!
! // maybe merge with the next region
! LinkedListNode<CommittedMemoryRegion>* next_node = node->next();
! if (next_node != NULL) {
! CommittedMemoryRegion* next = next_node->data();
! if (next->call_stack()->equals(stack) && rgn->adjacent_to(next->base(), next->size())) {
! // the two adjacent regions have the same call stack, merge them
! rgn->expand_region(next->base(), next->size());
!
! // the merge next_node needs to be removed from the list
! _committed_regions.remove(next_node);
! }
! }
return true;
}
}
if (rgn->overlap_region(addr, size)) {
*** 88,98 ****
}
// New committed region
VirtualMemorySummary::record_committed_memory(size, flag());
return add_committed_region(committed_rgn);
! }
void ReservedMemoryRegion::set_all_committed(bool b) {
if (all_committed() != b) {
_all_committed = b;
if (b) {
--- 98,108 ----
}
// New committed region
VirtualMemorySummary::record_committed_memory(size, flag());
return add_committed_region(committed_rgn);
! }
void ReservedMemoryRegion::set_all_committed(bool b) {
if (all_committed() != b) {
_all_committed = b;
if (b) {
< prev index next >