ensure changing buffer size requirements
This commit is contained in:
@@ -1,22 +1,39 @@
|
|||||||
package seaweedfs.client;
|
package seaweedfs.client;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ByteBufferPool {
|
public class ByteBufferPool {
|
||||||
|
|
||||||
static List<ByteBuffer> bufferList = new ArrayList<>();
|
private static final int MIN_BUFFER_SIZE = 8 * 1024 * 1024;
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ByteBufferPool.class);
|
||||||
|
|
||||||
|
private static final List<ByteBuffer> bufferList = new ArrayList<>();
|
||||||
|
|
||||||
public static synchronized ByteBuffer request(int bufferSize) {
|
public static synchronized ByteBuffer request(int bufferSize) {
|
||||||
|
if (bufferSize < MIN_BUFFER_SIZE) {
|
||||||
|
bufferSize = MIN_BUFFER_SIZE;
|
||||||
|
}
|
||||||
if (bufferList.isEmpty()) {
|
if (bufferList.isEmpty()) {
|
||||||
return ByteBuffer.allocate(bufferSize);
|
return ByteBuffer.allocate(bufferSize);
|
||||||
}
|
}
|
||||||
return bufferList.remove(bufferList.size()-1);
|
ByteBuffer buffer = bufferList.remove(bufferList.size() - 1);
|
||||||
|
if (buffer.capacity() >= bufferSize) {
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("add new buffer from {} to {}", buffer.capacity(), bufferSize);
|
||||||
|
bufferList.add(0, buffer);
|
||||||
|
return ByteBuffer.allocate(bufferSize);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized void release(ByteBuffer obj) {
|
public static synchronized void release(ByteBuffer obj) {
|
||||||
bufferList.add(obj);
|
bufferList.add(0, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user