code: protected int calculateReduction() {
          int createdTotal = pool.createdTotal();
          int maxReduction = (int) Math.ceil(createdTotal * MAX_REDUCTION_FRACTION);
          int reduction = Math.min(minRemainingCreated, maxReduction);
          int bottomThreshold = createdTotal - pool.initialSize();
          reduction = Math.min(reduction, bottomThreshold);
          return Math.max(reduction, 0);
      }
docs: Calculates the number of currently allocated on the pool elements that needs to be destroyed/deallocated,
  as a result of the stats collected during the just finished observational time period.
  The number of remaining allocated on the pool objects will <b>not</b> fall below the pool {@code initial}
  size as a result of this reduction.
  
  @return the calculated reduction number