@Override
  public void run() {
    stats.incEvictorJobsStarted();
    try {
      long totalBytesEvicted = 0;
      while (true) {
        final long start = statisticsClock.getTime();
        synchronized (regions) {
          if (regions.isEmpty()) {
            return;
          }
          // consider trying Fisher-Yates shuffle algorithm
          for (Iterator<LocalRegion> iterator = regions.iterator(); iterator.hasNext();) {
            LocalRegion region = iterator.next();
            try {
              long bytesEvicted = region.getRegionMap().centralizedLruUpdateCallback();
              if (bytesEvicted == 0) {
                iterator.remove();
              }
              totalBytesEvicted += bytesEvicted;
              if (totalBytesEvicted >= bytesToEvictPerTask || !getHeapEvictor().mustEvict()
                  || regions.isEmpty()) {
                return;
              }
            } catch (RegionDestroyedException e) {
              region.getCache().getCancelCriterion().checkCancelInProgress(e);
            } catch (RuntimeException e) {
              region.getCache().getCancelCriterion().checkCancelInProgress(e);
              logger.warn(String.format("Exception: %s occurred during eviction ",
                  e.getMessage()), e);
            } finally {
              long end = statisticsClock.getTime();
              stats.incEvictWorkTime(end - start);
            }
          }
        }
      }
    } finally {
      stats.incEvictorJobsCompleted();
    }
  }
Takes delta to be evicted and tries to evict the least no of LRU entry which would make
evictedBytes more than or equal to the delta

@since GemFire 6.0
geode-core/src/main/java/org/apache/geode/internal/cache/eviction/RegionEvictorTask.java