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. OpenResty: PHP增加数据库插件

    首先修改下php.ini 文件  告诉php当前的扩展库路径   扩展库--就是扩展的其它功能的库 这个就是扩展库文件夹,里面有很多功能性文件 就是增加这一句  extension_dir = &qu ...

  2. 阿里云物联网平台: Android 连接阿里云物联网平台

    说明 这节是是为下一节做铺垫的 只要是按照我提供的学习路线一节一节的认认真真学过来的,这节就十分的简单 有了前两节的基础,这节呢咱让Android 连接阿里云物联网平台 使用这节的代码  https: ...

  3. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于WIFI模块AT指令TCP透传方式,定时访问升级(含有数据校验)

    实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootL ...

  4. ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气

    前言: 实现功能概要: STM32使用AT指令控制Wi-Fi以TCP方式连接服务器(YY天气Web服务器),然后使用http的get协议获取今天的天气数据 单片机提取今天的温度和湿度数据,把温湿度数据 ...

  5. nuxtjs如何在单独的js文件中引入store和router

    nuxtjs里面集成vuex的创建方式改变了,并且官方不建议以导出Vuex实例的方式创建store,并且会在nuxt3里面删除.这样就会存在一个问题,我怎么像普通vue spa项目一样直接 impor ...

  6. Spring Boot 知识笔记(Filter过滤器)

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...

  7. PHP处理SOAP

    1.获取functions try { $client = new SoapClient("http://www.fangbei.org/services/inquiryTracingAnd ...

  8. 【C/C++开发】C++11 并发指南三(std::mutex 详解)

    本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C ...

  9. gcc命令详解

    gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC. ...

  10. spark 调优(官方文档)

    1.序列化 对象在进行网络传输或进行持久化时需要进行序列化,如果采用序列化慢或者消耗大量字节的序列化格式,则会拖慢计算. spark 提供了两种序列化类库 1). Java serialization ...