src/share/vm/gc/g1/heapRegionManager.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/gc/g1/heapRegionManager.cpp
src/share/vm/gc/g1/heapRegionManager.cpp
Print this page
*** 240,250 ****
for (uint i = 0; i < len; i++) {
if (!is_available(i)) {
continue;
}
guarantee(at(i) != NULL, "Tried to access region %u that has a NULL HeapRegion*", i);
! bool res = blk->doHeapRegion(at(i));
if (res) {
blk->incomplete();
return;
}
}
--- 240,262 ----
for (uint i = 0; i < len; i++) {
if (!is_available(i)) {
continue;
}
guarantee(at(i) != NULL, "Tried to access region %u that has a NULL HeapRegion*", i);
! blk->doHeapRegion(at(i));
! }
! }
!
! void HeapRegionManager::iterate(AbortableHeapRegionClosure* blk) const {
! uint len = max_length();
!
! for (uint i = 0; i < len; i++) {
! if (!is_available(i)) {
! continue;
! }
! guarantee(at(i) != NULL, "Tried to access region %u that has a NULL HeapRegion*", i);
! bool res = blk->doHeapRegionAbortable(at(i));
if (res) {
blk->incomplete();
return;
}
}
*** 353,363 ****
}
// OK, try to claim it
if (!hrclaimer->claim_region(index)) {
continue;
}
! bool res = blk->doHeapRegion(r);
if (res) {
return;
}
}
}
--- 365,407 ----
}
// OK, try to claim it
if (!hrclaimer->claim_region(index)) {
continue;
}
! blk->doHeapRegion(r);
! }
! }
!
! void HeapRegionManager::par_iterate(AbortableHeapRegionClosure* blk, uint worker_id, HeapRegionClaimer* hrclaimer, bool concurrent) const {
! const uint start_index = hrclaimer->start_region_for_worker(worker_id);
!
! // Every worker will actually look at all regions, skipping over regions that
! // are currently not committed.
! // This also (potentially) iterates over regions newly allocated during GC. This
! // is no problem except for some extra work.
! const uint n_regions = hrclaimer->n_regions();
! for (uint count = 0; count < n_regions; count++) {
! const uint index = (start_index + count) % n_regions;
! assert(index < n_regions, "sanity");
! // Skip over unavailable regions
! if (!is_available(index)) {
! continue;
! }
! HeapRegion* r = _regions.get_by_index(index);
! // We'll ignore regions already claimed.
! // However, if the iteration is specified as concurrent, the values for
! // is_starts_humongous and is_continues_humongous can not be trusted,
! // and we should just blindly iterate over regions regardless of their
! // humongous status.
! if (hrclaimer->is_region_claimed(index)) {
! continue;
! }
! // OK, try to claim it
! if (!hrclaimer->claim_region(index)) {
! continue;
! }
! bool res = blk->doHeapRegionAbortable(r);
if (res) {
return;
}
}
}
src/share/vm/gc/g1/heapRegionManager.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File