Android DVM
- 是Google公司自己设计用于Android平台的Java虚拟机
- 支持已经转化为.dex(及Dalvik Excutable)格式的Java应用程序的运行
- .dex格式是专为Dalvik设计的一种压缩格式,可以减少整体文件尺寸(对比?),提高I/O操作的类查找速度,所以适合内存和处理器速度有限的系统
- 数据结构不一致
- DVM——基于寄存器
- 基于寄存器的方式,对提前优化(ahead-of-time optimization)提供了很好的支持,移动设备属于受限环境,提前优化非常重要
- 基于寄存器的虚拟器,对于更大的程序来说,他们编译花费的时间更短
- JVM——基于栈
- 思考——寄存器&栈之间的区别?
- 寄存器——是中央处理器内的组成部分。是有限贮存容量的告诉存储部件,可以用于暂存指令、数据和地址。(更加底层)
- 控制部件——IR(指令寄存器)&PC(程序计数器)
- 算数及逻辑部件——ACC(累加器)
- 栈——线程独有的,保存期运行状态和局部变量(多线程中局部变量是相互独立的,不同于类变量)
- 栈在线程开始的时候初始化(Start方法)
- 每个函数都有自己的栈,用于函数间的参数传递
- 操作系统切换线程时候会自动切换栈,就是切换SS/ESP寄存器。
- 栈空间不需要在高级语言显示分配和释放
- 运行环境
- Dalvik经过优化,运行在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。
- 独立进程可以防止在虚拟机崩溃的时候所有程序都被关闭。(一个程序的闪退不影响另一个程序,沙箱原理?)
- JVM是怎么样的?
- 运行对象不同
- DVM——Dalvik专用文件格式.dex
- JVM——Java字节码
- Android所有类都通过Java编译器编译,再通过AndroidSDK的“dex文件转换工具”转换为dex字节文件,再有DVM载入运行。
- 使用专有的.dex格式
- java类文件在编译之后,会产生至少一个的.class文件,包含大量多余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中,减少了文件的尺寸和IO操作,也提高了类的查找速度。
- 增加了对新操作码的支持
- 文件结果尽量简洁,使用等长的指令,提高解析速度
- 尽量扩大只读结构的大小,提高跨进程的数据共享——?
- dex的优化
- 验证dex文件中的所有类
- 对一些特定的类和方法里面的操作码进行优化
- 调整所有的字节序和对齐结构中的每一个域
- 基于寄存器,代码执行效率更好(相对基于栈)
- 每一个Android应用都允许在自己的DVM实例中。每一个DVM实例都是一个独立的进程空间,所有Android的线程都对应Linux的线程,DVM可以更多地依赖操作系统的线程调度和管理机制(二者联系?)。
- 不同应用都是用不同的Linux用户运行以最大程度保护用户应用程序的安全性和独立性
Android DVM的更多相关文章
- java jvm和android DVM区别
本文转自:http://blog.csdn.net/yujun411522/article/details/45932247 1.Android dvm的进程和Linux的进程, 应用程序的进 ...
- android DVM
android 运行环境主要是虚拟机技术:Dalvik.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说 ...
- class 文件与dex文件区别 (dvm与jvm区别)及Android DVM介绍
区别一:dvm执行的是.dex格式文件 jvm执行的是.class文件 android程序编译完之后生产.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和 ...
- android 常见面试题以及答案
http://blog.csdn.net/bobo1808/article/details/6783344 1. 请描述下Activity的生命周期.2. 如果后台的Activity由于某 ...
- 【转】 71道经典Android面试题和答案,重要知识点都包含了
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- Android面试总结 (转)
1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...
- 72.40个Android面试题(转载)
1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持 ...
- 63.Android面试题精选 (转)
1.Android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dalivk虚拟机.每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实 ...
- 在帝都的Android面试感想
#第一次面试赤子城Android开发实习生 关于面试的表现和感想 1.没有准备充分就去面试(这是大忌,也就直接决定了结果) 我去面试Android,但是却不知道很多关于Android的基础知识,就是明 ...
随机推荐
- SQLServer2008R2 发布订阅及相关问题解决办法
前言: 前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
科班出身,贝叶斯护体,正本清源,故拿”九阳神功“自比,而非邪气十足的”九阴真经“: 现在看来,此前的八层功力都为这第九层作基础: 本系列第九篇,助/祝你早日hold住神功第九重,加入血统纯正的人工智能 ...
- 4年java开发,该何去何从!
以前都是一直看,今天楼主第一次发博,还望各位不吝赐教. 今天也没别的要说的,就是吐槽一下楼主这几天的面试遭遇,感觉都有点怀疑人生了. 先说说楼主的情况吧,13年毕业本科计算机专业,到现在一直做java ...
- spring @Autowired和jdk的@Resource区别
当一个接口只有一个实例时,使用这两个注解的效果是一样的. 当含有两个实例时,非得使用 @Autowired 那么定义的引用类型必须和service实现类定义的名字相同,参照下图 定义第一个servic ...
- JDBC之代码优化
上一次我们是先实现了JDBC对数据库的增删查改操作,然后在增加新信息过程中发现了新的问题,即当某一操作失败,为了维护数据库的一致性,我们需要回滚事务.在其中我们了解了事务的工作原理及相关代码的使用. ...
- 爬虫入门 手写一个Java爬虫
本文内容 涞源于 罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的? 2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...
- iOS开发经验总结
总结了几个月的东西终于能和大家分享了,不多说,直接看东西! 1.禁止手机睡眠 1 [UIApplication sharedApplication].idleTimerDisabled = YES; ...
- iOS 远程推送消息解析及逻辑处理
关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...
- js-引用类型-Array
1.数组的操作方法 <html> <meta http-equiv="content-type" charset="utf-8" /> ...
- cmd 更改计算机名
bat 更改计算机名 不用重启电脑就生效^_^ @Echo off Color 0A title --更改计算机名 :A cls echo. echo. [0]退出 echo. echo. 不用重启 ...