概述
在Android开发中,有一个常用的轻量数据保存工具:SharedPreferences(简称SP)
关于SharedPreferences:
SharedPreferences运用IO流读写文件的方式保存数据
IO流写文件需要经过二次拷贝:
①从用户空间写入内核空间需要CPU拷贝
②从内核空间写入磁盘需要DMA拷贝
SharedPreferences是全量更新,若数据过大,则耗时大大增加
SharedPreferences之所以不能保存大数据,是因为有可能造成 子线程 阻塞 主线程 的情况(内部有锁)
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 MMKV 原理简述所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复