本文转自:http://blog.csdn.net/yujun411522/article/details/45932247
1.Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念?
Dalvik虚拟机允许多个instance的存在。实际上android中的每一个app都是运行在自己VM实例之中(沙盒)。每一个VM实例在linux中又是一个单独的进程,所以可以认为是同一个概念。运行在自己的DVM进程之中,不同的app不会相互干扰,且不会因为一个DVM的崩溃导致所有的app进程都崩溃。
1.1 什么是Dalvik虚拟机?
java的运行需要JVM(后面有大量篇幅介绍),同样android中使用了java语言,也需要一个VM。针对手机处理器和内存等硬件资源不足而推出来的一款VM,为android运行提供环境。
2.与JVM的区别
2.1.基于架构的不同。JVM是基于的架构,而DVM是基于寄存器架构。
2.1.1 为什么JVM设计成基于栈架构,DVM是基于寄存器架构?    
优点: a.基于栈架构的指令集更容易生成(http://rednaxelafx.iteye.com/blog/492667);
           b.节省资源。其零地址指令比其他指令更加紧凑
           c.可移植性。考虑到JVM使用的场合大多是pc和服务器,这类机器的处理器中通用寄存器的数量不尽相同,如果使用基于寄存器其功能提升不多;而栈架构可以自由分配实际的寄存器,这样的可移植性比较高,也符合java的设计理念(一次编写,处处运行)。
DVM为什么基于寄存器:
优点:a.android手机制造商的处理器绝大部分都是基于寄存器架构的。
          b.栈架构中有更多的指令分派和访问内存,这些比较耗时。所有相对来认为dvm的执行效率更高一些。
          c.DVM就是为android运行而设计的,无需考虑其他平台的通用。
2.2.jvm运行的是字节码文件,而dvm运行自己定义的dex文件格式
JVM编译过程 java->class->jar
DVM编译过程java->class->dex。此过程又DX工具将所有class文件编译成一个dex文件,并会将多个class文件进行重构,好处主要有:减少了整体文件的尺寸,因为不同class文件中有重复的常量;提高运行速度。所有的class文件都生成在同一个文件之中,查找速度变快。
图从java文件生成dex文件过程
dvm和jvm区别简单来说就是?

区别一:dvm执行的是.dex格式文件  jvm执行的是.class文件   android程序编译完之后生产.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和.dex文件等打包成.apk文件。apk就是android package的意思。 jvm执行的是.class文件。

区别二:dvm是基于寄存器的虚拟机  而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。

区别三:.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度

3.Dalvik设计规则
3.1每一个app都运行在自己的DVM实例中与应用隔离。
3.2启动一个app进程,一个DVM也就诞生了,该app下的代码在DVM实例下解释运行
3.3有几个app进程就有几个dvm实例。
3.4dvm对对象生命周期(组件生命周期理解)、堆栈、线程、异常以及垃圾回收进行管理。
3.5不支持j2se和j2me的api,也就不支持awt和swing(现在用的也非常少)   
4.和ART的比较 
在dalvik中,app每一次运行都要通过即时编译器转化成机器码,这要多了一个编译过程,会降低运行速度。
而ART则是在安装时,直接将字节码编译成本机机器码,实现了真正的本地应用,在以后的运行中不需要每次都翻译。这样速度更快,但是所占用的存储空间越大。(5.0新特性)
详情查看http://baike.baidu.com/link?url=NkaPr153-tUb1Qvdg21OSeIAUTS0cs8IonQntGeH-RJ7LDP-q7UfjoNpvBmI6AboL7WN3Pf6_UU40F-sAx_S1q
Android DVM简介
  • Dalvik Virtual Machine 是Android平台的基础。
  • Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。选择基于寄存器的方式是因为它对提前优化(ahead-of-time optimization)提供了更好的支持,而这对类似于移动电话这样的受限环境是颇有裨益的。另一份针对基于寄存器虚拟机和基于栈虚拟机更深入的比较分析指出,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
  •   Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
  • Android平台架构图:

  • 如图所示:
  • 应用程序包括:主页、联系管理、电话、浏览器、其他;
  • 应用程序框架包括:Activity管理、窗体管理、内容提供者、视图系统、包管理、电话管理、资源管理、位置管理、通知管理。
  • 库包括:表面管理、媒体框架、SQLite、OpenGL(3D开发库)、FreeType(字体引擎)、WebKit(网页浏览器引擎核心库)、SGL(2D图形引擎库)、SSL、libc、Android运行时(又包括核心库和Dalvik虚拟机)。
  • Linux内核包括:显示驱动、照相机驱动、内存驱动、Binder(IPC)驱动、键盘驱动、Wi-Fi驱动、音频驱动、电源管理。
  • 作为Java开发者,最关系的可能是Android运行库(Android Runtime),它包括两部分:核心库和Dalvik虚拟机:
  • 1.Android包括一组核心库(core libraries),他提供了 Java 编程语言的核心库中大多数可用功能。
  • 2.每个 Android 应用程序运行在自己的进程上,有自己的 Dalvik 虚拟机实例。 Dalvik这样是为了使一个设备可以有效地运行多个虚拟机。 Dalvik VM 以被优化占用最小内存的Dalvik Executable (.dex)格式执行文件。VM 是基于寄存器的,并通过一个 Java 语言编译器的编译来运行,而这个Java编译器已经被内置的"dx"工具转成.dex 格式(DVM依赖LInux内核)。
  • 3.Dalvik MicrosoftVM 依赖 Linux 内核获得基本功能,如线程处理和底层内存管理。
  • Android亦包含常见移动平台的关键性能,它已拥有一个良好的堆栈,包括蓝牙、EDGE, 3G和WiFi。在UI方面,支持OpenGL ES提供3D和类似于iPhone的界面管理(surface management)。

转载于:https://www.cnblogs.com/haihai88/p/7656495.html

java jvm和android DVM区别相关推荐

  1. java and android_java jvm和android DVM区别

    本文转自:http://blog.csdn.net/yujun411522/article/details/45932247 1.Android dvm的进程和Linux的进程, 应用程序的进程是否为 ...

  2. POPTEST老李谈JVM、JRE、JDK、java ee sdk with jdk区别

    POPTEST老李谈JVM.JRE.JDK.java ee sdk with jdk区别 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作 ...

  3. 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

    认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别 2012-08-24 12:15 点击window---->preferences----> ...

  4. 【java】深入理解Java JVM虚拟机中init和clinit的区别

    1.概述 转载并且补充:深入理解Java JVM虚拟机中init和clinit的区别 原创 之所以来转载一下,是因为,有个学弟问了这个问题 这个知识点,回顾起来应该是我看 深入理解Java JVM虚拟 ...

  5. 为什么java jvm.dll_Windows下java、javaw、javaws以及jvm.dll等进程的区别

    java  ,javaw   和  javaws 的区别: 首先,所有的这些都是java的启动装置,java.exe经常使用,当使用命令行输出到window的时候,会有java.exe进程,通过任务管 ...

  6. Android DVM简介

    Dalvik Virtual Machine 是Android平台的基础.       Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈.选择基 ...

  7. Java 面试/笔试题神整理 [Java web and android]

    Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...

  8. 关于JVM和Dalvik的区别

    2019独角兽企业重金招聘Python工程师标准>>> Dalvik和JVM的几点区别       1.Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于更大的程序 ...

  9. Java JVM 动态方法调用指令 invokedynamic 实现分析(以 Lambda 表达式实现原理为例)...

    一.前言 对于 invokedynamic 指令的实现需要方法句柄作为前提知识点.可参考 Java JVM 动态方法调用之方法句柄 MethodHandle. 本文以 Lambda 表达式中运用 in ...

最新文章

  1. CCF-CSP 201612-2 工资计算(C++满分代码)
  2. android调用webservice传参数,android调用webservice接口获取信息
  3. JEP 277“增强弃用”非常好。 但这是一个更好的选择
  4. 单元测试:unittest.TestCase
  5. php控制器的作用,控制器定义 · ThinkPHP5.0完全开发手册 · 看云
  6. 我的flash头像编辑上传控件
  7. makefile obj文件路径_makefile中包含的文件的路径
  8. 数据可视化历史上的“人肉里程碑”
  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用...
  10. python黑马教程ppt_Python零基础教程下载|黑马Python零基础教程(附带教学课件 开发工具 环境配置下载 - 极光下载站...
  11. chrome/firefox插件ie tab,解决无法使用网银的问题
  12. 微信群二维码活码生成 微信活码
  13. 医院招聘计算机人员面试经典问题,医院收费员常见面试题目
  14. 推荐系统 之 AFM和DIN
  15. Vue项目安装XLSX成功后,生成项目报错:“export ‘default‘ (imported as ‘XLSX‘) was not found in ‘xlsx‘
  16. /usr/bin/ld:cannot find -lxxx通用解决办法
  17. UML入门1:事物和事物关系简介
  18. 清华大学软件学院计算机系,清华大学软件学院雍俊海教授学术讲座
  19. 概率论与数理统计(2.1-2.2)随机变量和离散型分布
  20. 国网GIM设备三维模型要求细则 - 交流断路器

热门文章

  1. 项目缺少包如何和服务器,解决缺少服务器依赖包问题
  2. SDL1.3(C语言)程序移植LINUX。。。
  3. 解决PCoIP连接View 5.0虚拟桌面超时断开导致无法再次登录的问题
  4. 计算一棵树的深度和宽度[Treeview的深度和宽度](多题头的表格问题解决的基础)...
  5. 外部表不是预期的格式怎么解决_1分钟拆解:如何将10多个工作表sheet,合并成一张?...
  6. 安卓7.0海信定制版新增功能
  7. 使用OGR2OGR将S57数据转为shp格式
  8. spring.net与OracleODP结合时发生的版本问题
  9. Spring Boot自定义Banner
  10. 1.ElementUI中table的sortable使用