mmap 是什么

mmap 是什么

什么是mmap

mmap 的作用是,能将一个文件映射到内存中,你可以像操作内存(Buffer)一样读写文件内容

为什么要使用 mmap

mmap 能加快文件的读写速度,因为它是直接被映射在内存中的,目前腾讯的 MMKV 就是使用了mmap,使其的读写速度非常快

java 中使用 mmap 的类是 MappedByteBuffer

FileChannel fileChannel = new RandomAccessFile(new File("file"), "rw").getChannel();
MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, filechannel.size();

MappedByteBuffer 提供了 put position get 方法操作 Buffer 中的内存

这个内存会被系统在合适的实际写入到文件中

mmap 是否足够安全

mmap 采用内存映射,操作 mmap 内存时,是由操作系统负责写入的
所以操作完内存后,如果app 异常退出,或者被杀死,数据都不会丢失

如果操作系统突然断电则可能丢失数据

当然出于性能考虑,对突然断电导致的丢失可以忽略

mmap 在Android中的应用范围

  • 日志
  • 配置

日志和配置是经常访问的文件

对于日志:

如果采用同步写入日志方式,则对性能影响极大。一次文件写入虽然低至 1-2ms,但仍旧会造成性能问题。异步写入则可能app出错或杀死,导致日志丢失,此时使用 mmap 写日志可以在性能和日志安全中取一个平衡

对于配置

配置是经常读取,又需要长久保存的数据,使用mmap 最合适不过

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2019/10/15/mmap-是什么