Android 运行环境主要指的虚拟机技术——Dalvik。Android中的所有Java程序都是运行在Dalvik VM上的。Android上的每个程序都有自己的线程,DVM只执行.dex的Dalvik executable 文件。每个Android应用在底层都对应有一个独立的DVM实例并在其解释下执行。    
虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.class byte code 文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android VM虽然也是是用Java语言进行编程, Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。    
每一个应用程序即一个进程(Linux的一个Process)。二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。     
DVM非常适合在移动终端上使用,与PC相比,它不需要很快的CPU和大量的内存空间. Google的测算显示,64MB的内存已经能让系统正常运转了。其中24MB被用于底层系统的初始化和启动。另外20MB被用于启动高层服务。DVM有如下特征:  
•使用专有的.dex格式。

•原因是java类文件在编译过后,会产生至少一个.class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。

•增加了对新的操作码的支持

•文件结构尽量简洁,使用等长的指令,借以提高解析速度。

•尽量扩大只读结构的大小,借以提高跨进程的数据共享。

•dex的优化,dex文件的结构是紧凑的,但是如果想提高运行时的性能,就需要对dex文件进行进一步的优化,这些优化针对以下几个方面:

•验证dex文件中的所有类

•对一些特定的类和方法里面的操作码进行优化 
•调整所有的字节序(Little_endian)和对齐结构中的每一个域 
•基于寄存器,基于寄存器的虚拟机虽然比基于堆栈的虚拟机在硬件,通用性上要差一些,但是它的代码执行效率去更好 
•每一个Android应用都运行在它自己的DVM实例中,每一个DVM实例都是一个独立的进程空间。所有的Android应用的线程都对应一个Linux线程,DVM因此可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,不同的应用都是用不同的Linux用户来运行以最大程度地保户应用程序的安全性和独立性 http://blog.csdn.net/virus026/archive/2010/12/19/6085779.aspx

最新文章

  1. pycharm svn服务器访问不了的问题。
  2. java多线程系类:JUC原子类:01之框架
  3. OpenCascade MeshVS Usage
  4. 论文阅读(Xiang Bai——【CVPR2015】Symmetry-Based Text Line Detection in Natural Scenes)
  5. 用PowerMock mock 临时变量
  6. Android 注解的一些应用以及原理
  7. Ubuntu/Debian 安装lxml的正确方式
  8. JavaScript高级程序设计8.pdf
  9. vue+webpack项目实战
  10. JIRA官方:缺陷与事务跟踪
  11. PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
  12. Struts2第四天
  13. 用Mysql进行emp、dept、salgrade表的相关查询操作
  14. request&response
  15. SpringBoot(五)Springmvc+Mybatis+mysql
  16. 自学Linux Shell19.1-gawk程序基础特性
  17. yii2开启事务
  18. OSPF邻居状态机
  19. 87. Scramble String *HARD* 动态规划
  20. [Algorithm] How to find all the subsets of an n-element set T?

热门文章

  1. Sqlite-SQLiteHelper类,操作SQLite数据库
  2. [React] Preventing extra re-rendering with function component by using React.memo and useCallback
  3. [ES6] 01. Intro to ES6 and traceur compiler
  4. HDU 4757
  5. Mysql创建、删除用户、查询所有用户等教程,提升您的MYSQL安全度!
  6. PHP Libxml函数
  7. Codeforces Round #FF (Div. 1)-A,B,C
  8. Python 倒叙切片
  9. PHP开发学习门户第三版UI正式上线
  10. centos 6.5安装docker报错(查看报错详细信息--推荐)