@Override
    public boolean offer(final E e, final long timeout, final TimeUnit unit) throws InterruptedException {
        return memoryLimiter.acquire(e, timeout, unit) && super.offer(e, timeout, unit);
    }
@Test
    public void testOfferWhenTimeout() throws InterruptedException {
        MemoryLimitedLinkedBlockingQueue<Runnable> queue = new MemoryLimitedLinkedBlockingQueue<>(1, instrumentation);
        assertFalse(queue.offer(() -> {
        }, 2, TimeUnit.SECONDS));
    }