public static void doGC(long deltaInKB) { gcRuns += 1; Map<String, PictureTilingCacheInfo> cache = PictureTilingComponent.getCache(); Map<Date, String> sortingMap = new HashMap<Date, String>(); for (String key : cache.keySet()) { PictureTilingCacheInfo cacheEntry = cache.get(key); sortingMap.put(cacheEntry.getLastAccessedTime(), key); } List<Date> accesTimeList = new ArrayList<Date>(); accesTimeList.addAll(sortingMap.keySet()); Collections.sort(accesTimeList); long deletedVolume = 0; for (Date accessDate : accesTimeList) { PictureTilingCacheInfo cacheEntry = cache.get(sortingMap.get(accessDate)); long deletePotential = cacheEntry.getDiskSpaceUsageInBytes() / (1024); if (deletePotential > deltaInKB - deletedVolume) { cacheEntry.partialCleanUp(deltaInKB - deletedVolume + 1); return; } else { deletedVolume += deletePotential; cacheEntry.cleanUp(); cache.remove(accessDate); } if (deletedVolume > deltaInKB) break; } }
public static long getCacheSizeInBytes() { long totalSize = 0; Map<String, PictureTilingCacheInfo> cache = PictureTilingComponent.getCache(); for (String key : cache.keySet()) { PictureTilingCacheInfo cacheEntry = cache.get(key); totalSize += cacheEntry.getDiskSpaceUsageInBytes(); } return totalSize; }