Dalvik虚拟机结构——1
Dalvik核心内容:libdvm.so 主要有C语言实现,依赖于Linux内核的一部分功能:线程机制,内存管理机制,每一个Android应有都对应一个dalvik实例
Dalvik虚拟机功能:主要完成的
对象的生命周期管理,堆栈管理,安全和异常管理,垃圾回收
Dalvik虚拟机对:线程管理,类加载,内存管理,本地接口,反射机制,解释器,即时编译等主要功能模块做优化创新。
进程管理:进程隔离、线程管理。每一个Android应用底层都会有一个独立的Dalvik虚拟机实例,所有Android应用的线程都对应一个Linux线程,进程管理依赖于Zygote机制
1。Zygote线程管理:每个Android应用都运行在一个Dalvik虚拟机实例里,每个虚拟机实例都是一个独立进程空间,目的是保护应用的独立运行和安全。
Zygote是系统启动时产生的,作用:完成虚拟机初始化,库加载,预置类库加载,初始化等操作。系统需要新的虚拟机实例时,Zygote通过复制自身。对于只读系统库,Zygote和所有虚拟机实例共享一个内存区域。
Zygote是虚拟机实例的孵化器。通过init进程启动。
启动过程:1。孵化System_Server启动系统服务,2。监听Socket等待请求命令,3。当有一个应用程序启动时,调用fork()创建新进程执行程序。
fork()三种方式:
1. fork(),普通进程,该进程属于Zygote进程
2. forkAndSpecialize(),特殊进程,该进程不再属于Zygote进程
3. forkSystemServer(),一个系统服务进程
2。类加载:解析Dex文件,加载Dalvik字节码。
Android系统启动时,加载所有基础类库;用户自定义类是在虚拟机运行时载入
内存管理:分配系统启动初始化和应用运行时需要的内存资源
1. 分配:底层依赖于dlmalloc内存分配器(DougLea编写),在堆上,分配失败回收
2. 回收:使用的MarkSweep算法,两个阶段
a) Mark阶段:标出活动对象,使用栈来保存根集合,栈中每个元素使用递归追踪访问,在markBits位图中将对象的内存启始地址对应的位设为1。栈为空时,markBits就是所有可访问的对象集合
b) Sweep阶段:liveBites位图标识所有已经分配的对象集合。liveBits和markBits位图的差异就是所有可回收的对象集合
本地接口:Java代码中调用其它代码的接口JNI:关注代码速度,硬件控制
3。反射机制:能动态查看、调用、更改任意类中的方法和属性,根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关语义。
Dalvik虚拟机的核心机制之一,算作类工具
Android Dalvik虚拟机结构及机制剖析 Dalvik虚拟机各模块机制分析
允许程序运行时通过反射机制的API取得一个已知名称的类的内部信息,并且可以在程序运行时改变属性的相关内容或调用其内部方法
4。解释器:根据自身Dalvik ByteCode解释字节码。在mterp目录下的out目录,存储针对各个平台的解释器程序和C语言实现的通用解释器。解释器的入口代码位于interp目录下Interp.cpp中的dvmInterpret()根据不同参数执行dvmMterpStd和dvmInterpretPortable
两种实现:
1. C语言实现:可以移植型解释器
2. 汇编语言实现:快速型解释器
5。即时编译:将反复执行的热代码编译成本地代码,降低解释器压力
程序执行的两种方式:
1. 解释:逐句读取源程序逐句翻译机器码执行。
2. 编译:程序执行前,整个翻译成等价的机器指令
Dalvik虚拟机结构——1的更多相关文章
- Dalvik虚拟机java方法执行流程和Method结构体分析
Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息. Method结构体是怎样定义的? 此结构体在不同的andr ...
- Dalvik虚拟机中DexClassLookup结构解析
http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的 ...
- 转 Android Dalvik虚拟机初识
首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别? Dalvik VM有什么新的特点? Dalvik VM的架构是怎么样的? 首先,我得承认第一个问题 ...
- Android Dalvik虚拟机初识(转)
原文地址:http://blog.csdn.net/andyxm/article/details/6126907 android虚拟机jvmjava优化linux内核 首先,让我们来思考下面几个问题: ...
- Dalvik虚拟机的运行过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8914953 在前面一篇文章中,我们分析了Dal ...
- Dalvik虚拟机JNI方法的注册过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8923483 在前面一文中,我们分析了Dalvi ...
- Dalvik虚拟机的启动过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8885792 在Android系统中,应用程序进 ...
- Android逆向基础----Android Dalvik虚拟机
Android Dalvik虚拟机的特点: l 体积小,占用内存空间小. l 专有DEX可执行文件. l 常量池采用32位索引值,寻址类方法名,字段名,常量更快. l 基于寄存器架构,并拥有一 ...
- Android Dalvik虚拟机初识
摘自:http://blog.csdn.net/andyxm/article/details/6126907 首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有 ...
随机推荐
- python 识别二维码内容的方法
识别二维码链接的方式有多种,那么如何用python 的方法实现识别呢? 请看如下代码: from pyzbar.pyzbar import decode from PIL import Image i ...
- Perl 使用perl命令批量替换文件内容
对linux系统下面多个文本文件内容做处理,是SA经常需要完成的工作.如何高效的完成这个工作,perl应该是一个不错的语言工具.你甚至不需要编写perl脚本,用命令就可以完成上面的工作. perl 命 ...
- 全球 IPv4 地址正式耗尽
重要消息: 就在 2019/11/25 UTC+1 15:35 时,一封来自欧洲 RIPE NCC 的邮件中得到确认:全球的IPv4地址已经彻底耗尽. IPv4 大家应该很熟悉了,就是我们平常所知道的 ...
- Hotspot的栈
各种类型的线程他们所需要的栈的大小其实是可以通过不同的参数来控制的: java_thread的stack_size,其实就是-Xss或者-XX:ThreadStackSize的值 compiler_t ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- VS C++代码能正确编译 但还是显示红色波浪线 提示"无法打开源文件"
症状细节 我发现很多第三方库的环境部署教程,都会教读者配置 属性VC++目录 -> 包含目录 比如OpenCV的环境配置教程. 这样配置之后能通过编译: 但是,在IDE里,会有一些烦人的红波浪线 ...
- spring cloud 服务链路追踪 skywalking 6.1
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了 ...
- 整合zuul启动时报错Correct the classpath of your application so that it contains a single, compatible version of XXX
今天集成zuul与consul的时候,出现如下错误 ***************************APPLICATION FAILED TO START******************** ...
- nginx缓存静态资源,只需几个配置提升10倍页面加载速度
nginx缓存静态资源,只需几个配置提升10倍页面加载速度 首先我们看图说话 这是在没有缓存的情况下,这个页面发送了很多静态资源的请求: 1.png 可以看到,静态资源占用了整个页面加载用时的90 ...
- Python3+Robot Framework+RIDE安装使用教程
一.说明 Python3----网上很多文章都是用Python2,Robot Framework的部分文档没更新也直接写着不支持Python3(如RIDE does not yet support P ...