/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.internal.streaming.bytes; import java.nio.ByteBuffer; /** * Manages the lifecycle of {@link ByteBuffer} instances, so that Mule can keep track * of how much buffer memory is being consumed by the owner of this manager. * <p> * Even though the {@link ByteBuffer} API doesn't have the concept of deallocation, for the purposes * of this class every buffer obtained through the {@link #allocate(int)} method should eventually be * passed to the {@link #deallocate(ByteBuffer)} method once the instance is no longer needed. * * @since 4.0 */ public interface ByteBufferManager { /** * Returns a {@link ByteBuffer} of the given {@code capacity}. * <p> * Invokers <b>MUST</b> call the {@link #deallocate(ByteBuffer)} method with the returned * buffer once it's no longer needed. * * @param capacity the capacity of the returned buffer * @return a {@link ByteBuffer} of the given {@code capacitiy} */ ByteBuffer allocate(int capacity); /** * Indicates that the given {@code byteBuffer} is no longer needed and the runtime * may dispose of it however it sees fit. * * @param byteBuffer the buffer to be deallocated. */ void deallocate(ByteBuffer byteBuffer); }