@Override public Value remove( Object key ) { if( key == null ) throw new IllegalArgumentException( "key cannot be null" ); int index = index( key ); Entry<Key, Value> existing = elements[ index ]; if( existing == null || !existing.getKey().equals( key ) ) return null; elements[ index ] = null; actualSize--; evictionCallBack.evict( existing ); return existing.getValue(); }
@Override protected boolean removeEldestEntry( Map.Entry<Key, Value> eldest ) { boolean doRemove = size() > capacity; if( doRemove ) { callback.evict( eldest ); if( flushes % getCapacity() == 0 ) // every multiple, write out data { Runtime runtime = Runtime.getRuntime(); long freeMem = runtime.freeMemory() / 1024 / 1024; long maxMem = runtime.maxMemory() / 1024 / 1024; long totalMem = runtime.totalMemory() / 1024 / 1024; LOG.info( "flushed keys num times: {}, with capacity: {}", flushes + 1, capacity ); LOG.info( "mem on flush (mb), free: " + freeMem + ", total: " + totalMem + ", max: " + maxMem ); float percent = (float) totalMem / (float) maxMem; if( percent < 0.80F ) LOG.info( "total mem is {}% of max mem, to better utilize unused memory consider increasing the cache size", (int) ( percent * 100.0F ) ); } flushes++; } return doRemove; } };
@Override protected boolean removeEldestEntry( Map.Entry<Key, Value> eldest ) { boolean doRemove = size() > capacity; if( doRemove ) { callback.evict( eldest ); if( flushes % getCapacity() == 0 ) // every multiple, write out data { Runtime runtime = Runtime.getRuntime(); long freeMem = runtime.freeMemory() / 1024 / 1024; long maxMem = runtime.maxMemory() / 1024 / 1024; long totalMem = runtime.totalMemory() / 1024 / 1024; LOG.info( "flushed keys num times: {}, with capacity: {}", flushes + 1, capacity ); LOG.info( "mem on flush (mb), free: " + freeMem + ", total: " + totalMem + ", max: " + maxMem ); float percent = (float) totalMem / (float) maxMem; if( percent < 0.80F ) LOG.info( "total mem is {}% of max mem, to better utilize unused memory consider increasing the cache size", (int) ( percent * 100.0F ) ); } flushes++; } return doRemove; } };
evictionCallBack.evict( existing );