Android虚拟机与类加载机制

2021-08-18  本文已影响0人  Dalvik_

1.基于栈的虚拟机

JVM式基于栈的虚拟机


基于栈的虚拟机

2.基于寄存器的虚拟机

寄存器是CPU的组成部分,寄存器是有限存储容量的高速存储部件,他们可以用来暂存指令、数据和位置
Dalvik是基于寄存器的虚拟机


寄存器的虚拟机 基于寄存器的虚拟机

3.Art与Dalvik的区别

4.Android N Art虚拟机的混合模式
ART 使用预先 (AOT) 编译,并且从 Android N混合使用AOT编译,解释和JIT。
1、最初安装应用时不进行任何 AOT 编译(安装又快了),运行过程中解释执行,对经常执行的方法进行JIT,经过 JIT 编译的方法将会记录到Profile配置文件中。
2、当设备闲置和充电时,编译守护进程会运行,根据Profile文件对常用代码进行 AOT 编译。待下次运行时直接使用。


Android N Art虚拟机的混合模式

5.Android中各个ClassLoader的作用

Android中各个ClassLoader
Log.e(TAG, "Activity.class 由:" + Activity.class.getClassLoader() +" 加载"); 
Log.e(TAG, "MainActivity.class 由:" + getClassLoader() +" 加载"); 
//输出:
Activity.class 由:java.lang.BootClassLoader@d3052a9 加载 
MainActivity.class 由:dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.enjoy.enjoyfix-1/base.apk"],nativeLibraryDirectories= [/data/app/com.enjoy.enjoyfix-1/lib/x86, /system/lib, /vendor/lib]]] 加载

6.ClassLoader加载类流程与双亲委托机制

某个类加载器在加载类时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务或者没有父类加载器时,才自己去加载。


双亲委托机制

1、避免重复加载,当父加载器已经加载了该类的时候,就没有必要子ClassLoader再加载一次。
2、安全性考虑,防止核心API库被随意篡改。(避免加载到自己写的系统类)

7.安卓类加载从APK(dex)加载类的流程

安卓类加载从APK(dex)加载类的流程

8.dex插桩式热修复原理


热修复原理
生成dex文件命令
dx --dex --output=output.dex  input.jar
上一篇 下一篇

猜你喜欢

热点阅读