@Override
    public void put(final E e) throws InterruptedException {
        memoryLimiter.acquireInterruptibly(e);
        super.put(e);
    }
@Test
    public void testPut() throws InterruptedException, ExecutionException {
        Integer testObject = 0;
        long testObjectSize = instrumentation.getObjectSize(testObject);
        MemoryLimitedLinkedBlockingQueue<Integer> queue = new MemoryLimitedLinkedBlockingQueue<>(2 * testObjectSize + 1, instrumentation);
        queue.put(testObject);
        queue.put(testObject);
        assertEquals(2, queue.size());
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        Future<Boolean> putResult = executorService.submit(() -> {
            try {
                queue.put(testObject);
                return Boolean.TRUE;
            } catch (InterruptedException e) {
                return Boolean.FALSE;
            }
        });
        Thread.sleep(2000);
        queue.poll();
        assertTrue(putResult.get());
        assertEquals(2, queue.size());
    }