< 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 >