@Override
    public void close() {
      assert myLock.isLocked();

      ScheduledFuture<?> invalidationRequest;
      try {
        myInvalidationRequest = invalidationRequest =
          ourScheduledExecutorService.schedule(() -> { invalidateZipReference(null); }, RETENTION_MS, TimeUnit.MILLISECONDS);
      }
      finally {
        myLock.unlock();
      }

      TimedZipHandler leastUsedHandler = null;
      synchronized (ourLRUCache) {
        if (ourLRUCache.putAndMoveToFirst(TimedZipHandler.this, invalidationRequest) == null && ourLRUCache.size() > LRU_CACHE_SIZE) {
          leastUsedHandler = ourLRUCache.lastKey();
          invalidationRequest = ourLRUCache.removeLast();
        }
      }
      if (leastUsedHandler != null) {
        leastUsedHandler.myHandle.invalidateZipReference(invalidationRequest);
      }
    }
@Override
    public void close()