docs: boolean evict(StoreEventSink<K, V> eventSink) {
      evictionObserver.begin();
      Random random = new Random();
  
      @SuppressWarnings("unchecked")
      Map.Entry<K, OnHeapValueHolder<V>> candidate = map.getEvictionCandidate(random, SAMPLE_SIZE, EVICTION_PRIORITIZER, EVICTION_ADVISOR);
  
      if (candidate == null) {
        // 2nd attempt without any advisor
        candidate = map.getEvictionCandidate(random, SAMPLE_SIZE, EVICTION_PRIORITIZER, noAdvice());
      }
  
      if (candidate == null) {
        return false;
      } else {
        Map.Entry<K, OnHeapValueHolder<V>> evictionCandidate = candidate;
        AtomicBoolean removed = new AtomicBoolean(false);
        map.computeIfPresent(evictionCandidate.getKey(), (mappedKey, mappedValue) -> {
          if (mappedValue.equals(evictionCandidate.getValue())) {
            removed.set(true);
            if (!(evictionCandidate.getValue() instanceof Fault)) {
              eventSink.evicted(evictionCandidate.getKey(), evictionCandidate.getValue());
              invalidationListener.onInvalidation(mappedKey, evictionCandidate.getValue());
            }
            updateUsageInBytesIfRequired(-mappedValue.size());
            return null;
          }
          return mappedValue;
        });
        if (removed.get()) {
          evictionObserver.end(StoreOperationOutcomes.EvictionOutcome.SUCCESS);
          return true;
        } else {
          evictionObserver.end(StoreOperationOutcomes.EvictionOutcome.FAILURE);
          return false;
        }
      }
    }