Browse Source

ensure changing buffer size requirements

pull/1397/head
Chris Lu 4 years ago
parent
commit
cacc601cc8
  1. 23
      other/java/client/src/main/java/seaweedfs/client/ByteBufferPool.java

23
other/java/client/src/main/java/seaweedfs/client/ByteBufferPool.java

@ -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);
} }
} }
Loading…
Cancel
Save