本文转自: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

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)。

java and android_java jvm和android DVM区别相关推荐

  1. java jvm和android DVM区别

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

  2. 安卓Android和Java语言的异同、关系和区别

    安卓Android和Java语言的异同.关系和区别,安卓Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备.2011年第一季度,安卓在全球的市场份额首次超过塞班系统,跃居全球 ...

  3. Android DVM简介

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

  4. 关于JVM和Dalvik的区别

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

  5. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记

    前言 我在读 深入理解java虚拟机 这本书,把整体其中的关键点标记了,希望自己对它有个不一样的理解,也希望大家能看看这本写的很好的书 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) pd ...

  6. JAVA虚拟机:JVM和Java体系架构

    一.Java及JVM简介 2022 TIOBE 排行榜: https://www.tiobe.com/tiobe-index/ 二.Java 生态圈 Java 是目前应用最为广泛的软件开发平台之一.拥 ...

  7. java虚拟机参数-X 与 -XX的区别

    java虚拟机参数-X 与 -XX的区别 java虚拟机参数-X 与 -XX的区别 为什么有的用-X 如,-Xms -Xmx -Xmn等 有的用-XX: 如-XX:MaxPermSize=100M等 ...

  8. java中对JVM的深度解析、调优工具、垃圾回收

    jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...

  9. Java 8 的 JVM 有多快?Fork-Join 性能基准测试

    2019独角兽企业重金招聘Python工程师标准>>> Java 8 已经发布一段时间了,许多开发者已经开始使用 Java 8.本文也将讨论最新发布在 JDK 中的并发功能更新.事实 ...

最新文章

  1. linux find命令 报错 遗漏"-exec"的参数 解决方法
  2. 计算机网络_第7版_谢希仁_目录
  3. Python教程:序列的增量赋值
  4. require与include+php,PHP中include与require有什么区别
  5. 跟风学Docker之四:Docker网络解决方案
  6. JAVA进阶day07JNI(java调用c)A部分
  7. 2021大数据1班《Python程序设计基础》学生学期总结
  8. Python可视化:Seaborn(三)
  9. 开发之没沟通误删客户数据库数据之找数据路
  10. Spring Cloud 异常处理
  11. man exportfs(exportfs命令中文手册)
  12. python如何设置双索引_python-在新的多索引下串联熊猫列
  13. DVB 数字电视基础知识
  14. latex:表格排版示例
  15. 高仿QQ创建搜索框以及拼音检索好友
  16. ADO 笔记 ——关于RecordCount
  17. 论文阅读: (ECCV 2022) Content-Oriented Learned Image Compression
  18. C程序设计语言逆波兰式计算器学习心得
  19. 【大数据入门】Hadoop技术原理与应用之基于Hadoop的数据仓库Hive
  20. dell设置从ssd启动_戴尔笔记本加了固态硬盘后怎么设置从固态硬盘启动

热门文章

  1. EMC共模干扰处理,共模扼流圈的应用和选型。
  2. 定积分的基本性质4 绝对可积性
  3. alc236黑苹果驱动_黑苹果亮度调节及调节快捷键驱动
  4. 一文读懂什么是云服务器,和本地服务器的区别,云服务的用途,华为云服务器的获取
  5. JVM中的本地内存追踪NMT(Native Memory Tracking)
  6. 微信、Uber、阴谋论和口袋罪
  7. kali配置静态IP地址
  8. DCM:中间件家族迎来新成员,属实牛逼
  9. java的弱引用_理解Java中的弱引用(Weak Reference)
  10. Mailgun提供了新的报告仪表板