RFR: Compact heuristics adjustments

Roman Kennke rkennke at redhat.com
Thu Nov 15 16:19:35 UTC 2018


Ok.

Out of curiousity: what is the practical consequence of this? Even
compacter heap at the expense of even more CPU burn?

Roman

> I want to do a few "compact" heuristics adjustments after my yesterday's experiments with it: more
> aggressive uncommit, denser compaction, reacting on minimum free threshold it case allocation
> threshold is too high.
> 
> diff -r 509403d31498 src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp
> --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp        Thu Nov 15
> 11:12:27 2018 +0100
> +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp        Thu Nov 15
> 17:10:24 2018 +0100
> @@ -35,20 +35,27 @@
>    SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent);
>    SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahUncommit);
>    SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahAlwaysClearSoftRefs);
>    SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahAllocationThreshold,  10);
>    SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahImmediateThreshold,   100);
> -  SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahUncommitDelay,        5000);
> +  SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahUncommitDelay,        1000);
>    SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahGuaranteedGCInterval, 30000);
> -  SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahGarbageThreshold,     20);
> +  SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahGarbageThreshold,     10);
>  }
> 
>  bool ShenandoahCompactHeuristics::should_start_normal_gc() const {
>    ShenandoahHeap* heap = ShenandoahHeap::heap();
> 
>    size_t available = heap->free_set()->available();
>    size_t threshold_bytes_allocated = heap->capacity() * ShenandoahAllocationThreshold / 100;
> +  size_t min_threshold = ShenandoahMinFreeThreshold * heap->capacity() / 100;
> +
> +  if (available < min_threshold) {
> +    log_info(gc)("Trigger: Free (" SIZE_FORMAT "M) is below minimum threshold (" SIZE_FORMAT "M)",
> +                 available / M, min_threshold / M);
> +    return true;
> +  }
> 
>    if (available < threshold_bytes_allocated) {
>      log_info(gc)("Trigger: Free (" SIZE_FORMAT "M) is lower than allocated recently (" SIZE_FORMAT
> "M)",
>                   available / M, threshold_bytes_allocated / M);
>      return true;
> 
> Testing: tier3_gc_shenandoah
> 
> Thanks,
> -Aleksey
> 



More information about the shenandoah-dev mailing list