1. Java —— 是在JVM虚拟机 执行jar
java的可执行文件是jar文件,运行在JVM虚拟机上,JVM虚拟机通过 ClassLoader加载 jar文件,并且执行里边的代码逻辑;
2. Android —— 是在 Dalvik/ART虚拟机 执行 dex文件
- 在程序运行时候首先把对应的类加载到内存中;
- Android的可执行文件是 dex文件,运行在 Dalvik/ART虚拟机上,在apk文件中会有一个或多个 dex文件,而我们写的所有的代码都会被编译到这些 dex文件中,Android运行的时候就是通过执行这些 dex文件来完成应用功能的;
3. Dalvik虚拟机类加载机制
Dalvik虚拟机不能直接用ClassLoader加载 .dex文件,Android从ClassLoader派生出两个类,DexClassLoader和PathClassLoader,这两个类是我们加载 dex文件的关键,二者区别在于:
- DexClassLoader:可以加载jar/apk/dex,可以从SD卡中加载未安装的 apk;
- PathClassLoader:只能加载已经安装的 apk文件;
Android中的类加载源码分析可参照我下边文章:
ClassLoader类加载器源码分析