我遇到了一个问题,我创建了大小为1KB的MappedByteBuffer
,并浏览了大小为20MB的文件。
for(20MB file) {
writeBuffer = fc.map(MapMode.READ_WRITE, writeIndex, mappingSize);
// write data into the writeBuffer
//update to new write index
}
在这种情况下,我创建了一大堆1KB
MappedByteBuffer
的文件,我认为当在文件中向前移动时可以重新使用这些文件,显然,这里不是这种情况,因为一段时间后我遇到了OOM。但是,当我为上面的相同代码编辑mappingSize并将其设置为128KB时,测试运行正常(没有OOM)。
有人可以解释
MappedByteBuffer
的缓冲区大小如何影响系统如何分配和回收资源(在这种情况下为内存)吗? 最佳答案
没有确定的时间可以释放基础MappedByteBuffers的VM映射。因此它永远不会被释放。因此,您使用的越少越好。