code: @Override
    public void run() {
      long lastCheckMs = System.currentTimeMillis();
      while (mRunning) {
        // Check the time since last check, and wait until it is within check interval
        long lastIntervalMs = System.currentTimeMillis() - lastCheckMs;
        long toSleepMs = mCheckIntervalMs - lastIntervalMs;
        if (toSleepMs > 0) {
          CommonUtils.sleepMs(LOG, toSleepMs);
        } else {
          LOG.warn("Session cleanup took: {}, expected: {}", lastIntervalMs, mCheckIntervalMs);
        }
  
        // Check if any sessions have become zombies, if so clean them up
        lastCheckMs = System.currentTimeMillis();
        for (long session : mSessions.getTimedOutSessions()) {
          mSessions.removeSession(session);
          for (SessionCleanable sc : mSessionCleanables) {
            sc.cleanupSession(session);
          }
        }
      }
    }
docs: Main loop for the cleanup, continuously looks for zombie sessions.