--- old/src/share/vm/gc/g1/g1CollectionSet.cpp 2016-09-08 10:52:21.493370864 +0200 +++ new/src/share/vm/gc/g1/g1CollectionSet.cpp 2016-09-08 10:52:21.351366469 +0200 @@ -396,6 +396,17 @@ 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; @@ -493,6 +504,8 @@ 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