Java NIO MappedByteBuffer OutOfMemoryException


问题内容

我真的很麻烦:我想使用FileChannels和MappedByteBuffers 读取超过GB的巨大文件-
我发现的所有文档都暗示使用该FileChannel.map()方法映射文件相当简单。当然,由于所有Buffer方法都将int用于位置,限制和容量,因此限制为2GB,但是系统隐含的限制在那之下呢?

实际上,我遇到很多有关OutOfMemoryExceptions 的问题!根本没有任何文件可以真正定义限制!因此-
如何在MappedByteBuffer不获取异常的情况下将适合int-limit的文件安全地映射到一个或几个s中?

在尝试之前,我可以问系统可以安全地映射文件的哪一部分FileChannel.map()吗?怎么样?为什么很少有关于此功能的文档?


问题答案:

文件越大,一次存储在内存中的需求就越少。设计一种方法来一次处理文件的缓冲区,一次处理一行,等等。

MappedByteBuffer尤其成问题,因为没有定义的映射内存释放,因此一次使用多个内存本质上注定会失败。