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的更多相关文章

  1. Dalvik虚拟机java方法执行流程和Method结构体分析

    Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息. Method结构体是怎样定义的? 此结构体在不同的andr ...

  2. Dalvik虚拟机中DexClassLookup结构解析

    http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的 ...

  3. 转 Android Dalvik虚拟机初识

    首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别? Dalvik VM有什么新的特点? Dalvik VM的架构是怎么样的? 首先,我得承认第一个问题 ...

  4. Android Dalvik虚拟机初识(转)

    原文地址:http://blog.csdn.net/andyxm/article/details/6126907 android虚拟机jvmjava优化linux内核 首先,让我们来思考下面几个问题: ...

  5. Dalvik虚拟机的运行过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8914953 在前面一篇文章中,我们分析了Dal ...

  6. Dalvik虚拟机JNI方法的注册过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8923483 在前面一文中,我们分析了Dalvi ...

  7. Dalvik虚拟机的启动过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8885792 在Android系统中,应用程序进 ...

  8. Android逆向基础----Android Dalvik虚拟机

    Android Dalvik虚拟机的特点: l  体积小,占用内存空间小. l  专有DEX可执行文件. l  常量池采用32位索引值,寻址类方法名,字段名,常量更快. l  基于寄存器架构,并拥有一 ...

  9. Android Dalvik虚拟机初识

    摘自:http://blog.csdn.net/andyxm/article/details/6126907 首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有 ...

随机推荐

  1. hdu5285-wyh2000 and pupil-(染色法二分图判定)

    http://acm.hdu.edu.cn/showproblem.php?pid=5285 题意:把互不认识的人分到两个组,第一组人数尽可能多. 题解:把互不认识的人连起来,当作二分图,二分图可能有 ...

  2. Kinect for Windows V2开发教程

    教程 https://blog.csdn.net/openbug/article/details/80921437 Windows版Kinect SDK https://docs.microsoft. ...

  3. vue大文件上传组件选哪个好?

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  4. 【JZOJ100209】【20190705】狂妄之人

    题目 \(S\)串长为\(n\),字符集大小为\(k\) 一次操作为:取走\(S\)的任意一个字符或将\(S\)重排为一个没有出现过的字符\(S'\) 询问有多少个\(S\)使得后手必胜,答案对\(P ...

  5. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $A$ 为 $n$ 阶实对称阵, 证明: $A$ 有 $n$ 个不同的特征值当且仅当对 $A$ 的任一特征值 $\lambda_0$ 及对应的特征向量 $\alpha$, 矩 ...

  6. Codeforces Round 564 题解

    很抱歉让标题把您骗进来了. 这是一场打得最失败的div1. 作为一个橙名一题都不会…… 旁边紫名的PB怒切3题,div2的也随便玩玩出了div1b/div2d…… 这名字颜色也太有水分了. 也就只会2 ...

  7. Spring Security教程(一)

    一 概要 Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权.这 ...

  8. CentOS 7搭建本地yum源和局域网yum源

    这两天在部署公司的测试环境,在安装各种中间件的时候,发现各种依赖都没有:后来一检查,发现安装的操作系统是CentOS Mini版,好吧,我认了:为了完成测试环境的搭建,我就搭建了一个局域网的yum源. ...

  9. Solr7.x学习(4)-导入数据

    导入配置可参考官网:http://lucene.apache.org/solr/guide,http://lucene.apache.org/solr/guide/7_7/ 1.数据准备(MySQL8 ...

  10. kube-prometheus部署

    一.从git拉取相应yaml文件 git clone https://github.com/coreos/kube-prometheus.git 二.修改grafana及prometheus的serv ...