public BufferCache(IIOManager ioManager, IPageReplacementStrategy pageReplacementStrategy, IPageCleanerPolicy pageCleanerPolicy, IFileMapManager fileMapManager, int maxOpenFiles, ThreadFactory threadFactory) { this.ioManager = ioManager; this.pageSize = pageReplacementStrategy.getPageSize(); this.maxOpenFiles = maxOpenFiles; pageReplacementStrategy.setBufferCache(this); pageMap = new CacheBucket[pageReplacementStrategy.getMaxAllowedNumPages() * MAP_FACTOR + 1]; for (int i = 0; i < pageMap.length; ++i) { pageMap[i] = new CacheBucket(); } this.pageReplacementStrategy = pageReplacementStrategy; this.pageCleanerPolicy = pageCleanerPolicy; this.fileMapManager = fileMapManager; Executor executor = Executors.newCachedThreadPool(threadFactory); fileInfoMap = new HashMap<>(); cleanerThread = new CleanerThread(); executor.execute(cleanerThread); closed = false; fifoWriter = new AsyncFIFOPageQueueManager(this); if (DEBUG) { confiscatedPages = new ArrayList<>(); confiscatedPagesOwner = new HashMap<>(); confiscateLock = new ReentrantLock(); pinnedPageOwner = new ConcurrentHashMap<>(); } }