code: Segment findSegmentToReleaseIfRequired() {
          fetchUpdatesIfNeeded();
          Segment segment = null;
          synchronized (decisionLock) {
              if (!releaseTimer.hasRemaining() && sync.getState().getCheckpointForReader(readerId) == null
                      && doesReaderOwnTooManySegments(sync.getState())) {
                  segment = findSegmentToRelease();
                  if (segment != null) {
                      releaseTimer.reset(UPDATE_WINDOW);
                      acquireTimer.reset(UPDATE_WINDOW);
                  }
              }
          }
          return segment;
      }
docs: If a segment should be released because the distribution of segments is imbalanced and
  this reader has not done so in a while, this returns the segment that should be released.