< prev index next >

src/hotspot/share/gc/shenandoah/heuristics/shenandoahYoungHeuristics.cpp

Print this page

 49   // for example, we continue examining regions even after rejecting a region that has
 50   // more live data than we can evacuate.
 51 
 52   // Better select garbage-first regions
 53   QuickSort::sort<RegionData>(data, (int) size, compare_by_garbage);
 54 
 55   size_t cur_young_garbage = add_preselected_regions_to_collection_set(cset, data, size);
 56 
 57   choose_young_collection_set(cset, data, size, actual_free, cur_young_garbage);
 58 
 59   log_cset_composition(cset);
 60 }
 61 
 62 void ShenandoahYoungHeuristics::choose_young_collection_set(ShenandoahCollectionSet* cset,
 63                                                             const RegionData* data,
 64                                                             size_t size, size_t actual_free,
 65                                                             size_t cur_young_garbage) const {
 66 
 67   auto heap = ShenandoahGenerationalHeap::heap();
 68 
 69   size_t capacity = heap->young_generation()->max_capacity();
 70   size_t garbage_threshold = ShenandoahHeapRegion::region_size_bytes() * ShenandoahGarbageThreshold / 100;
 71   size_t ignore_threshold = ShenandoahHeapRegion::region_size_bytes() * ShenandoahIgnoreGarbageThreshold / 100;
 72   const uint tenuring_threshold = heap->age_census()->tenuring_threshold();
 73 
 74   // This is young-gen collection or a mixed evacuation.
 75   // If this is mixed evacuation, the old-gen candidate regions have already been added.
 76   size_t max_cset = (size_t) (heap->young_generation()->get_evacuation_reserve() / ShenandoahEvacWaste);
 77   size_t cur_cset = 0;
 78   size_t free_target = (capacity * ShenandoahMinFreeThreshold) / 100 + max_cset;
 79   size_t min_garbage = (free_target > actual_free) ? (free_target - actual_free) : 0;
 80 
 81 
 82   log_info(gc, ergo)(
 83           "Adaptive CSet Selection for YOUNG. Max Evacuation: %zu%s, Actual Free: %zu%s.",
 84           byte_size_in_proper_unit(max_cset), proper_unit_for_byte_size(max_cset),
 85           byte_size_in_proper_unit(actual_free), proper_unit_for_byte_size(actual_free));
 86 
 87   for (size_t idx = 0; idx < size; idx++) {
 88     ShenandoahHeapRegion* r = data[idx].get_region();
 89     if (cset->is_preselected(r->index())) {

 49   // for example, we continue examining regions even after rejecting a region that has
 50   // more live data than we can evacuate.
 51 
 52   // Better select garbage-first regions
 53   QuickSort::sort<RegionData>(data, (int) size, compare_by_garbage);
 54 
 55   size_t cur_young_garbage = add_preselected_regions_to_collection_set(cset, data, size);
 56 
 57   choose_young_collection_set(cset, data, size, actual_free, cur_young_garbage);
 58 
 59   log_cset_composition(cset);
 60 }
 61 
 62 void ShenandoahYoungHeuristics::choose_young_collection_set(ShenandoahCollectionSet* cset,
 63                                                             const RegionData* data,
 64                                                             size_t size, size_t actual_free,
 65                                                             size_t cur_young_garbage) const {
 66 
 67   auto heap = ShenandoahGenerationalHeap::heap();
 68 
 69   size_t capacity = heap->soft_max_capacity();
 70   size_t garbage_threshold = ShenandoahHeapRegion::region_size_bytes() * ShenandoahGarbageThreshold / 100;
 71   size_t ignore_threshold = ShenandoahHeapRegion::region_size_bytes() * ShenandoahIgnoreGarbageThreshold / 100;
 72   const uint tenuring_threshold = heap->age_census()->tenuring_threshold();
 73 
 74   // This is young-gen collection or a mixed evacuation.
 75   // If this is mixed evacuation, the old-gen candidate regions have already been added.
 76   size_t max_cset = (size_t) (heap->young_generation()->get_evacuation_reserve() / ShenandoahEvacWaste);
 77   size_t cur_cset = 0;
 78   size_t free_target = (capacity * ShenandoahMinFreeThreshold) / 100 + max_cset;
 79   size_t min_garbage = (free_target > actual_free) ? (free_target - actual_free) : 0;
 80 
 81 
 82   log_info(gc, ergo)(
 83           "Adaptive CSet Selection for YOUNG. Max Evacuation: %zu%s, Actual Free: %zu%s.",
 84           byte_size_in_proper_unit(max_cset), proper_unit_for_byte_size(max_cset),
 85           byte_size_in_proper_unit(actual_free), proper_unit_for_byte_size(actual_free));
 86 
 87   for (size_t idx = 0; idx < size; idx++) {
 88     ShenandoahHeapRegion* r = data[idx].get_region();
 89     if (cset->is_preselected(r->index())) {
< prev index next >