@Override public BinaryManagerStatus garbageCollectBinaries(boolean delete) { List<BinaryGarbageCollector> gcs = getGarbageCollectors(); // start gc long start = System.currentTimeMillis(); for (BinaryGarbageCollector gc : gcs) { gc.start(); } // in all repositories, mark referenced binaries // the marking itself will call back into the appropriate gc's mark method RepositoryService repositoryService = Framework.getService(RepositoryService.class); for (String repositoryName : repositoryService.getRepositoryNames()) { Repository repository = repositoryService.getRepository(repositoryName); repository.markReferencedBinaries(); } // stop gc BinaryManagerStatus globalStatus = new BinaryManagerStatus(); for (BinaryGarbageCollector gc : gcs) { gc.stop(delete); BinaryManagerStatus status = gc.getStatus(); globalStatus.numBinaries += status.numBinaries; globalStatus.sizeBinaries += status.sizeBinaries; globalStatus.numBinariesGC += status.numBinariesGC; globalStatus.sizeBinariesGC += status.sizeBinariesGC; } globalStatus.gcDuration = System.currentTimeMillis() - start; return globalStatus; }