src/hotspot/share/gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.cpp
changeset 55587 4644b3155fce
parent 54833 76751d3faf7b
child 58543 a7a606f6311c
equal deleted inserted replaced
55586:014c8cd323af 55587:4644b3155fce
    33 
    33 
    34 ShenandoahAdaptiveHeuristics::ShenandoahAdaptiveHeuristics() :
    34 ShenandoahAdaptiveHeuristics::ShenandoahAdaptiveHeuristics() :
    35   ShenandoahHeuristics(),
    35   ShenandoahHeuristics(),
    36   _cycle_gap_history(new TruncatedSeq(5)),
    36   _cycle_gap_history(new TruncatedSeq(5)),
    37   _conc_mark_duration_history(new TruncatedSeq(5)),
    37   _conc_mark_duration_history(new TruncatedSeq(5)),
    38   _conc_uprefs_duration_history(new TruncatedSeq(5)) {
    38   _conc_uprefs_duration_history(new TruncatedSeq(5)) {}
    39 
       
    40   SHENANDOAH_ERGO_ENABLE_FLAG(ExplicitGCInvokesConcurrent);
       
    41   SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
       
    42 
       
    43   // Final configuration checks
       
    44   SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
       
    45   SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
       
    46   SHENANDOAH_CHECK_FLAG_SET(ShenandoahKeepAliveBarrier);
       
    47   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
       
    48   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
       
    49 }
       
    50 
    39 
    51 ShenandoahAdaptiveHeuristics::~ShenandoahAdaptiveHeuristics() {}
    40 ShenandoahAdaptiveHeuristics::~ShenandoahAdaptiveHeuristics() {}
    52 
    41 
    53 void ShenandoahAdaptiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
    42 void ShenandoahAdaptiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
    54                                                                          RegionData* data, size_t size,
    43                                                                          RegionData* data, size_t size,
   119   } else if (phase == ShenandoahPhaseTimings::conc_update_refs) {
   108   } else if (phase == ShenandoahPhaseTimings::conc_update_refs) {
   120     _conc_uprefs_duration_history->add(secs);
   109     _conc_uprefs_duration_history->add(secs);
   121   } // Else ignore
   110   } // Else ignore
   122 }
   111 }
   123 
   112 
   124 bool ShenandoahAdaptiveHeuristics::should_start_normal_gc() const {
   113 bool ShenandoahAdaptiveHeuristics::should_start_gc() const {
   125   ShenandoahHeap* heap = ShenandoahHeap::heap();
   114   ShenandoahHeap* heap = ShenandoahHeap::heap();
   126   size_t capacity = heap->max_capacity();
   115   size_t capacity = heap->max_capacity();
   127   size_t available = heap->free_set()->available();
   116   size_t available = heap->free_set()->available();
   128 
   117 
   129   // Check if we are falling below the worst limit, time to trigger the GC, regardless of
   118   // Check if we are falling below the worst limit, time to trigger the GC, regardless of
   170     log_info(gc, ergo)("Free headroom: " SIZE_FORMAT "M (free) - " SIZE_FORMAT "M (spike) - " SIZE_FORMAT "M (penalties) = " SIZE_FORMAT "M",
   159     log_info(gc, ergo)("Free headroom: " SIZE_FORMAT "M (free) - " SIZE_FORMAT "M (spike) - " SIZE_FORMAT "M (penalties) = " SIZE_FORMAT "M",
   171                        available / M, spike_headroom / M, penalties / M, allocation_headroom / M);
   160                        available / M, spike_headroom / M, penalties / M, allocation_headroom / M);
   172     return true;
   161     return true;
   173   }
   162   }
   174 
   163 
   175   return ShenandoahHeuristics::should_start_normal_gc();
   164   return ShenandoahHeuristics::should_start_gc();
   176 }
   165 }
   177 
   166 
   178 bool ShenandoahAdaptiveHeuristics::should_start_update_refs() {
   167 bool ShenandoahAdaptiveHeuristics::should_start_update_refs() {
   179   if (! _update_refs_adaptive) {
   168   if (! _update_refs_adaptive) {
   180     return _update_refs_early;
   169     return _update_refs_early;