< prev index next >
src/hotspot/share/gc/g1/g1CollectionSet.cpp
Print this page
*** 203,212 ****
--- 203,219 ----
return;
}
}
}
+ void G1CollectionSet::par_iterate(HeapRegionClosure* cl,
+ HeapRegionClaimer* hr_claimer,
+ uint worker_id,
+ uint total_workers) const {
+ iterate_part_from(cl, hr_claimer, 0, cur_length(), worker_id, total_workers);
+ }
+
void G1CollectionSet::iterate_optional(HeapRegionClosure* cl) const {
assert_at_safepoint();
for (uint i = 0; i < _num_optional_regions; i++) {
HeapRegion* r = _candidates->at(i);
*** 217,246 ****
void G1CollectionSet::iterate_incremental_part_from(HeapRegionClosure* cl,
HeapRegionClaimer* hr_claimer,
uint worker_id,
uint total_workers) const {
! assert_at_safepoint();
! size_t len = increment_length();
! if (len == 0) {
return;
}
! size_t start_pos = (worker_id * len) / total_workers;
size_t cur_pos = start_pos;
do {
! uint region_idx = _collection_set_regions[cur_pos + _inc_part_start];
if (hr_claimer == NULL || hr_claimer->claim_region(region_idx)) {
HeapRegion* r = _g1h->region_at(region_idx);
bool result = cl->do_heap_region(r);
guarantee(!result, "Must not cancel iteration");
}
cur_pos++;
! if (cur_pos == len) {
cur_pos = 0;
}
} while (cur_pos != start_pos);
}
--- 224,260 ----
void G1CollectionSet::iterate_incremental_part_from(HeapRegionClosure* cl,
HeapRegionClaimer* hr_claimer,
uint worker_id,
uint total_workers) const {
! iterate_part_from(cl, hr_claimer, _inc_part_start, increment_length(), worker_id, total_workers);
! }
! void G1CollectionSet::iterate_part_from(HeapRegionClosure* cl,
! HeapRegionClaimer* hr_claimer,
! size_t offset,
! size_t lenght,
! uint worker_id,
! uint total_workers) const {
! assert_at_safepoint();
! if (lenght == 0) {
return;
}
! size_t start_pos = (worker_id * lenght) / total_workers;
size_t cur_pos = start_pos;
do {
! uint region_idx = _collection_set_regions[cur_pos + offset];
if (hr_claimer == NULL || hr_claimer->claim_region(region_idx)) {
HeapRegion* r = _g1h->region_at(region_idx);
bool result = cl->do_heap_region(r);
guarantee(!result, "Must not cancel iteration");
}
cur_pos++;
! if (cur_pos == lenght) {
cur_pos = 0;
}
} while (cur_pos != start_pos);
}
< prev index next >