private boolean releaseOverCachedChannels() throws IOException {
    int dropCount = myCache.size() - myCapacity;

    if (dropCount >= 0) {
      List<Path> keysToDrop = new ArrayList<>();
      for (Map.Entry<Path, ChannelDescriptor> entry : myCache.entrySet()) {
        if (dropCount < 0) break;
        if (!entry.getValue().isLocked()) {
          dropCount--;
          keysToDrop.add(entry.getKey());
        }
      }

      for (Path file : keysToDrop) {
        closeChannel(file);
      }

      return true;
    }
    return false;
  }
private boolean releaseOverCachedChannels()