我遇到了一个问题,我创建了大小为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映射。因此它永远不会被释放。因此,您使用的越少越好。

09-26 14:32