private void updateSize(V v, boolean increment) { long add = increment ? checkAndGetSize(v) : -checkAndGetSize(v); if (statisticsWithHeapUsage.update(size.addAndGet(add)) > limit) removeOldest(); }
public FileHolder getFileHolder(File file) { return file.length() <= maxCachedFileSize ? filesCache.get(file.getAbsolutePath()) : null; }
@Test public void memoryLimitedCacheTest() throws InterruptedException { MemoryLimitedCache<String, MemoryLimitedCache.SizeProvider> cache = new MemoryLimitedCache<String, MemoryLimitedCache.SizeProvider>(5, 1, new Computable<String, MemoryLimitedCache.SizeProvider>() { @Override public MemoryLimitedCache.SizeProvider compute(final String s) { return new MemoryLimitedCache.SizeProvider() { @Override public long size() { return s.length(); } }; } }); Assert.assertEquals(0, cache.size()); cache.get("foo1"); Assert.assertEquals(1, cache.size()); cache.get("foo2"); Assert.assertEquals(1, cache.size()); cache.get("foo3"); Assert.assertEquals(1, cache.size()); cache.get("foo4"); Assert.assertEquals(1, cache.size()); Assert.assertEquals(4, cache.memoryUsed()); Assert.assertEquals(5, cache.limit()); }
@Override public void onAddItem(K k, V v) { if (v != null) updateSize(v, true); super.onAddItem(k, v); }
protected MemoryLimitedCache<String, FileHolder> createFileHolderCache(long cacheMemoryLimit, long cacheTTL, boolean gzip) { return new MemoryLimitedCache<>("resources", cacheMemoryLimit, cacheTTL, path -> createFileHolder(path, gzip)); }
@Override public void onRemoveItem(K k, V v) { try { super.onRemoveItem(k, v); } finally { if (v != null) updateSize(v, false); } }
private void updateSize(V v, boolean increment) { long add = increment ? checkAndGetSize(v) : -checkAndGetSize(v); if (statisticsWithHeapUsage.update(size.addAndGet(add)) > limit) removeOldest(); }
@Override public void onRemoveItem(K k, V v) { if (v != null) updateSize(v, false); super.onRemoveItem(k, v); }
@Override public void onAddItem(K k, V v) { try { super.onAddItem(k, v); } finally { if (v != null) updateSize(v, true); } }