@SuppressWarnings("unchecked")
    protected void internalReturnObject(final PoolItem<V> item, final boolean usePool) {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Return Object\n" + getKeySizes());
        }

        if (usePool) {
            try {
                final PoolKey<K> poolKey = item.getKey();

                if (cache.getIfPresent(poolKey).isEmpty()) {
                    // Item no longer in the cache so no point returning it to the deque
                    // Cache may have been cleared/rebuilt or the item aged off.
                    LOGGER.debug("Returning item {} whose poolKey is not in the cache, dropping it.", item);
                } else {
                    // Make this key available again to other threads.
                    // Get the current deque associated with the key.
                    keyMap.compute(poolKey.getKey(), (k, v) -> {
                        LinkedBlockingDeque<PoolKey<K>> deque = v;
                        if (deque == null) {
                            deque = new LinkedBlockingDeque<>();
                        }
                        // Put the returned item onto the deque.
                        deque.offer(poolKey);
                        return deque;
                    });
                }
            } catch (final RuntimeException e) {
                LOGGER.debug(e.getMessage(), e);
                throw new RuntimeException(e.getMessage(), e);
            }
        }
    }
Forces the eviction of all pooled items associated with this key

@param key The key of the entry to evict.
stroom-pipeline/src/main/java/stroom/pipeline/cache/AbstractPoolCache.java