合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
二、Android 虚拟机和编译加载顺序 Android 热修复其实主要是针对Android 虚拟机加载类的一个过程,所以首先我们应该知道Android 常用的虚拟机是Dalvik 虚拟和ART 虚拟机; Android 4.0 之前是主要是的Dalvik 虚拟机。Android 4.4 之后开始支持ART虚拟机(可选), Android 5.0 之后就是ART 虚拟机; ``` Android 4.0 --> Android 4.4 --> Android 5.0 ---> Android 7.0 ``` Dalvik 虚拟机在Android 2.2 的时候引入了JIT (Just in time), 也就是一边运行,一边编译成机器码在运行;这种编译成机器码的过程在应用重启的时候需要重新编译成机器码再运行,有点浪费性能(不是持久化),重复翻译,编译,运 行; 在Android 5.0 之后就使用完全使用ART 虚拟机;因为在AOT (ahead of time)的操作在安装的时候把dex 优化成odex; 在Android N (7) 之前是全量dex 优化成odex, 这样导致安装apk 的时候,或者系统更新重启的时候非常耗时,特别的慢; 所以在Android N 后引入了JIT 和AOT 的混合模式; 可以理解为“全时段的编译”(All-Of-the-Time compilation, 也叫AOT;是不是发现有2 个AOT, 一开始我也很懵逼的;其实和Android 5.0 中的AOT 是不太一样的;还有要注意的是Android N 之后的JIT 和Davlik 虚拟机中的JIT 是不一样的,简单理解就是高级版的JIT;这个高级版本的JIT 过程会把处理后的odex 缓存到base.art(有些地方也叫image ) 中;等下次app 启动的时候,就先直接把这个优化后的base.art 加载到内存中;这样就不会重复的JIT 了;