- 内存映射文件提供了Java有可能达到的最快IO操作,故高性能Java应用应使用“内存映射文件”来持久化数据,尤其是对于较大文件来说它确实比I/O流要快很多,但是小文件却未必。
- 内存映射文件可以加载大文件,文件的size上限取决于操作系统(内存的可寻址范围):32位,不能超过4GB,即2^32比特;64位,你几乎可以将任何文件映射到内存中并直接使用Java访问。
- 内存映射文件允许你使用direct或者non-direct 字节缓存(Byte buffer)来直接读写内存。
- 内存映射文件的一个关键优势是操作系统负责真正的读写,即使你的程序在刚刚写入内存后就挂了,操作系统仍然会将内存中的数据写入文件系统。
- 另外一个更突出的优势是共享内存,内存映射文件可以被多个进程同时访问,起到一种低时延共享内存的作用。
将整个文件或者文件的一部分映射到内存中,这样java直接从内存中访问你所加载的文件的数据。操作系统负责获取页面请求和写入文件,应用程序就只需要处理内存数据,这样可以实现非常快速的IO操作。(与内存映射文件相对的是:从disk读写文件)
一般用法是:
- 创建RandomAccessFile对象 raf
- raf.getChannel().map()方法获取映射出的内存文件MappedByterBuffer 对象 mbb
- 调用mbb.put()或mbb.get()方法进行写或读
参考: