我是靠谱客的博主 发嗲煎饼,这篇文章主要介绍Android MMKV 原理简述,现在分享给大家,希望可以做个参考。

在Android开发中,有一个常用的轻量数据保存工具:SharedPreferences(简称SP)

关于SharedPreferences:

  • SharedPreferences运用IO流读写文件的方式保存数据

IO流写文件需要经过二次拷贝:

①从用户空间写入内核空间需要CPU拷贝

②从内核空间写入磁盘需要DMA拷贝

  • SharedPreferences是全量更新,若数据过大,则耗时大大增加

  • SharedPreferences之所以不能保存大数据,是因为有可能造成 子线程 阻塞 主线程 的情况(内部有锁)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
final class SharedPreferencesImpl implements SharedPreferences { private final Object mLock = new Object(); // 锁对象 private boolean mLoaded = false; // 读写状态标识符 private void startLoadFromDisk() { synchronized (mLock) { mLoaded = false; } new Thread("SharedPreferencesImpl-load") { public void run() { loadFromDisk(); } }.start(); }     // 从SP中读写数据时都会调用这个方法,数据越多,等待加载的时间就会越长 private void awaitLoadedLocked() { if (!mLoaded) { BlockGuard.getThreadPolicy().onReadFromDisk(); } while (!mLoaded) { try { mLock.wait(); } catch (InterruptedException unused) { } } if (mThrowable != null) { throw new IllegalStateException(mThrowable); } } }

关于MMKV:

  • mmkv运用了零拷贝技术(mmap)

mmap:用户空间和内核空间的虚拟内存映射到同一块物理内存中,只需要一次拷贝

  • mmkv是增量更新

  • mmkv通过Protobuf的方式进行序列化

protobuf:以纯字节的形式去保存数据,更节省内存


总结:

SP写入数据:用户空间拷贝一份数据(xml文件)到内核空间,内核空间再拷贝一份到磁盘中

MMKV写入数据:用户空间的虚拟内存映射一块物理内存,内核空间的虚拟内存也映射于此,这样用户空间对此物理内存操作后,内核空间也能访问到此数据,再拷贝一份到磁盘中。且mmkv是以字节的方式保存

最后

以上就是发嗲煎饼最近收集整理的关于Android MMKV 原理简述的全部内容,更多相关Android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部