protected PoolItem<V> internalBorrowObject(final K key, final boolean usePool) {
        try {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Borrow Object\n" + getKeySizes());
            }

            PoolKey<K> poolKey = null;

            if (!usePool) {
                return new PoolItem<>(new PoolKey<>(key), internalCreateValue(key));
            }

            // Get the current deque associated with the key.
            final LinkedBlockingDeque<PoolKey<K>> deque = keyMap.get(key);
            if (deque != null) {
                // Pull a pool key off the deque if there is one.
                poolKey = deque.poll();
            }

            // If there isn't a pool key on the deque then create a new one.
            if (poolKey == null) {
                poolKey = new PoolKey<>(key);
            }

            // Get an item from the cache using the pool key.
            final PoolItem<V> val = cache.get(poolKey);

            return val;

        } 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