最近开发过程中需要使用到bytebuffer这个类。一开始是这样创建的。
ByteBuffer buffer = ByteBuffer.allocate(50 * 1024 * 1024)
本地测试没有问题,部署到测试环境,并发的时候出现问题了,报错说java no heap space。
查看源码,原来在初始化的时候,会先申请50MB的堆内存。所以多个同时申请,超过内存的话,则会申请不到,报错误。
public static ByteBuffer allocate(int capacity) {
if (capacity < 0)
throw new IllegalArgumentException();
return new HeapByteBuffer(capacity, capacity);
}
所以,在使用ByteBuffer的时候要注意设置好缓存大小。