< prev index next >
src/share/vm/gc/g1/g1CollectionSet.cpp
Print this page
@@ -394,10 +394,21 @@
phase_times()->record_young_cset_choice_time_ms((young_end_time_sec - young_start_time_sec) * 1000.0);
return time_remaining_ms;
}
+static int compare_region_idx(const void *a, const void*b) {
+ uint const first = *(uint*)a;
+ uint const second = *(uint*)b;
+ assert(first != second, "Two regions with the same index %u in the collection set", first);
+ if (first > second) {
+ return 1;
+ } else {
+ return -1;
+ }
+}
+
void G1CollectionSet::finalize_old_part(double time_remaining_ms) {
double non_young_start_time_sec = os::elapsedTime();
double predicted_old_time_ms = 0.0;
if (!collector_state()->gcs_are_young()) {
@@ -491,10 +502,12 @@
log_debug(gc, ergo, cset)("Finish choosing CSet. old: %u regions, predicted old region time: %1.2fms, time remaining: %1.2f",
old_region_length(), predicted_old_time_ms, time_remaining_ms);
double non_young_end_time_sec = os::elapsedTime();
phase_times()->record_non_young_cset_choice_time_ms((non_young_end_time_sec - non_young_start_time_sec) * 1000.0);
+
+ qsort(_collection_set_regions, _collection_set_cur_length, sizeof(uint), compare_region_idx);
}
#ifdef ASSERT
class G1VerifyYoungCSetIndicesClosure : public HeapRegionClosure {
private:
< prev index next >