这里我再介绍一种mmap()在Android系统上的使用场景, mmap的设计目的就是为了让文件的访问更有效率 ,所以当APK进行安装时,为了更高效的读取APK包里面的文件,同样也用到了mmap函数。
成都创新互联公司致力于互联网网站建设与网站营销,提供成都网站设计、做网站、网站开发、seo优化、网站排名、互联网营销、小程序制作、公众号商城、等建站开发,成都创新互联公司网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。
Binder机制中mmap的最大特点是一次拷贝即可完成进程间通信 。Android应用在进程启动之初会创建一个单例的ProcessState对象,其构造函数执行时会同时完成binder mmap,为进程分配一块内存,专门用于Binder通信,如下。
可以看到Android的匿名共享内存是通过 ashmem_create_region() 函数来申请共享内存的,它会在/dev/ashmem下创建一个虚拟文件,Linux原生共享内存是通过shmget()函数,并会在/dev/shm下创建虚拟文件。
1、静态加载:System.loadLibrary(String libname),来直接加载,对于一个app它只能加载system的和我们自己添加到jniLibs下的so文案。静态加载会去这些路径找到对应的库否则会抛出异常。
2、动态加载和静态加载指的是什么时候加载 ,动态加载是运行时加载(CommonJS),静态加载是编译时加载(ES6)。当然es6也提供的动态加载,即import() 。同步加载还是异步加载指的是加载的方式。 静态加载中都是同步加载的。
3、含义不同。动态指的是变化、运动或者活动的状态,强调事物的运动性和变化性;而静态则指的是稳定、静止或者停滞的状态,强调事物的不动性和稳定性。 时间维度不同。
4、动态加载与静态加载相对来说,建议使用动态加载,静态加载固定在了xml文件中,永远不变。
5、静态引用是在编译jsp前简单地把源代码包含进来 动态引用是在执行时,把web请求和响应对象传过去,对请求和相应对象进一步处理 也就是说,静态引用,引用的代码是什么,引用进来就是什么。
6、动态布局,也就是可以根据业务的需求改变界面。实际上就是用代码写出界面,代码量比较大。而且维护起来十分的繁琐。特别是一些界面空间比较多的时候。静态的布局,是通过xml来实现的,适用于页面比较固定的情况。
mmap的关键点是实现了用户空间和内核空间的数据直接交互而省去了空间不同数据不通的繁琐过程,因此mmap效率很高。
MMAP是一种内存映射文件的方法,将文件或者一些对象映射到进程的地址空间。实现文件磁盘地址跟进程虚拟地址空间中的一段内存空间一一映射关系。
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
能使用信号的。使用sigaction()或者signal()都可以的。
Android 应用是在dalvik虚拟机中运行的。NDK可以让你使用本地代码语言来开发应用,比如说C/C,这种方法对某些类型的应用的是有好处的,可以充分利用本地代码和在某些情况下加速代码的执行。
Android中JNI是编译so库的源代码,编译成功后会生成SO库,android中最终是使用SO库的。
安装好以上android应用程序的开发环境后,还可以选择是否需要配置emulator和adb工具的环境变量,以方便在进行JNI开发的时候使用。