Dalvik虚拟机【1】——介绍
2016-07-16 17:24
239 查看
什么是虚拟机
Dalvik虚拟机执行应用流程
Dalvik虚拟机的功能
Dalvik虚拟机与Java虚拟机的区别
参考资料
进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,所有的Android应用的线程都对应一个Linux线程,进程管理依赖于Zygote机制实现
类加载
解析Dex文件并加载Dalvik字节码:加载应用时从APK文件找到classes.dex文件并从该Dex文件中加载Dalvik字节码供虚拟机执行模块调用
当虚拟机在运行时需要调用的一个成员方法或者一个成员变量所属的类没有被解析的时候,虚拟机会调用类加载模块,对这个类、超类以及这些类的相关接口进行加载和连接。
内存管理
负责分配apk运行时需要的内存资源以及垃圾回收
本地接口(JNI)
上层应用调用本地代码(Java语言与Native语言相互调用)
反射机制
动态查看、调用、更改任意类中的方法和属性,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射机制在实现其功能时首先通过上层应用API运用JNI本地调用机制调用本地方法集中的函数,再向下层调用Dalvik虚拟机中的内部函数,最后将结果逐层返回到最上层的应用。
解析器
解析Dex字节码,转换成成本地代码并执行,解析器即使Dalvik的执行引擎
即时编译(JIT)
将反复执行的字节码编译成本地代码,降低解析器的压力。即使当某一个方法第一次执行时,JIT将对该方法指向的字节码编译成本地代码,然后该方法的指针指向该本地代码,第二次执行时讲直接执行其本地代码,提高运行效率
Dalvik的设计是基于寄存器的,Java虚拟机的设计是基于栈的
运行文件格式的差异
Dalvik运行的文件格式是dex,Java虚拟机运行的文件格式是字节码文件
《Android Dalvik虚拟机结构及机制剖析——第2卷 Dalvik虚拟机各模块机制分析》
Dalvik虚拟机执行应用流程
Dalvik虚拟机的功能
Dalvik虚拟机与Java虚拟机的区别
参考资料
什么是虚拟机
虚拟机就是一个虚构出来的计算机, 是通过在实际的计算机上仿真模拟各种 计算机功能来实现的。它有自己完善的硬件架构,如处理器、堆栈、寄存器等。Dalvik虚拟机执行应用流程
Dalvik虚拟机的功能
进程管理进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,所有的Android应用的线程都对应一个Linux线程,进程管理依赖于Zygote机制实现
类加载
解析Dex文件并加载Dalvik字节码:加载应用时从APK文件找到classes.dex文件并从该Dex文件中加载Dalvik字节码供虚拟机执行模块调用
当虚拟机在运行时需要调用的一个成员方法或者一个成员变量所属的类没有被解析的时候,虚拟机会调用类加载模块,对这个类、超类以及这些类的相关接口进行加载和连接。
内存管理
负责分配apk运行时需要的内存资源以及垃圾回收
本地接口(JNI)
上层应用调用本地代码(Java语言与Native语言相互调用)
反射机制
动态查看、调用、更改任意类中的方法和属性,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射机制在实现其功能时首先通过上层应用API运用JNI本地调用机制调用本地方法集中的函数,再向下层调用Dalvik虚拟机中的内部函数,最后将结果逐层返回到最上层的应用。
解析器
解析Dex字节码,转换成成本地代码并执行,解析器即使Dalvik的执行引擎
即时编译(JIT)
将反复执行的字节码编译成本地代码,降低解析器的压力。即使当某一个方法第一次执行时,JIT将对该方法指向的字节码编译成本地代码,然后该方法的指针指向该本地代码,第二次执行时讲直接执行其本地代码,提高运行效率
Dalvik虚拟机与Java虚拟机的区别
架构上差异Dalvik的设计是基于寄存器的,Java虚拟机的设计是基于栈的
运行文件格式的差异
Dalvik运行的文件格式是dex,Java虚拟机运行的文件格式是字节码文件
参考资料
《Android Dalvik虚拟机结构及机制剖析——第1卷 Dalvik虚拟机结构剖析》《Android Dalvik虚拟机结构及机制剖析——第2卷 Dalvik虚拟机各模块机制分析》
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories