Android平台体系结构中的虚拟机与JAVA中的虚拟机有什么不同
来源:互联网 发布:上海森伯格矩阵形式 编辑:程序博客网 时间:2024/05/21 09:11
参考 http://zhidao.baidu.com/link?url=QSBPc9CmZF34l98BGnC_TrcFrRljHsb8vej9ravk2cGiiXZd9n1Kw95pzXHoSc4SoPZIhiPYdKJe6dP_wzfLKa
参考 http://www.it165.net/pro/html/201403/11158.html
Dalvik 和标准Java 虚拟机(JVM)首要差别Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。Dalvik 和Java 运行环境的区别1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。3:不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex4:dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。6:所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。8:Dalvik是由Dan Bornstein编写的,名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛。
在Android的体系框架中有一部分叫做Android Runtime,即Android运行时环境,这个环境包括了两个部分,一个是Android的核心类库,还有一个就是Dalvik虚拟机了。
Android之所以开发Dalvik虚拟机而不使用JAVA自带的JVM是出于以下两点考虑(个人认为,不代表广泛意义):
1.版权问题,如果使用JVM就涉及到了版权问题,所以google需要在JVM的基础上做一些改进,创造自己的虚拟机。
2.性能问题。当然jvm虚拟机对Java开发来说性能已经足够了,但是相对移动平台的特性,比如低内存,低电量等,就显得有些牵强了,所以为了优化虚拟机的工作效率,google开发了android自己的虚拟机。
如上图所示,jvm是吧.java文本编译成.class字节码文件,在执行java程序的时候,类加载器把需要的类全部加载到内存当中去。
上图展示的是把字节码文件载入到内存后的结构,每个Class文件被解析成了几部分,包括了Header(主要是jdk的版本等)、常量等。。。
有多少个类,就会在内存中产生多少个上图结构中的文件。
上图所示是dalvik虚拟机加载的类文件结构图。davik虚拟机把.java文件编译成.class文件,又把.class文件转换成.dex文件,dalvik来执行.dex文件。
实际上.dex文件就是把多个class文件中的常量、方法等放到一起。形成如上图所示的结构。
在架构上jvm是基于栈的架构,所以每次访问数据cpu都要到内存中取到数据。
而dalvik是基于寄存器的架构。寄存器是在cpu上的一块存储空间,cpu如果直接从寄存器上读取数据的话就会快很多。
- Android平台体系结构中的虚拟机Dalvik与JAVA中的虚拟机有什么不同
- Android平台体系结构中的虚拟机与JAVA中的虚拟机有什么不同
- Android平台体系结构中的虚拟机与JAVA中的虚拟机的不同
- Docker和虚拟机有什么不同
- Java虚拟机体系结构 - 平台无关性
- Docker在LXC基础上做了什么 && Docker与虚拟机之间有什么不同
- 虚拟机 理解Android虚拟机体系结构
- Java虚拟机中的缓存
- java虚拟机中的对象
- JAVA平台与JAVA虚拟机
- java中的class 与Class , A.class 与 A.getClass() 到底有什么 不同
- Android体系结构和虚拟机
- Android体系结构和虚拟机
- Android虚拟机体系结构
- 理解Android虚拟机体系结构
- javascript 中的tagName 与 nodeName有什么不同
- java虚拟机体系结构分析
- Java虚拟机体系结构概述
- 404自动跳转主页的实现
- [iOS进阶]iOS消息机制
- IE下条件注释使用
- 总线系统-第二节 总线接口
- 第23讲—项目六—前导0的数字
- Android平台体系结构中的虚拟机与JAVA中的虚拟机有什么不同
- 在C++中添加第三方DLL库文件和LIB文件
- 面试题61:按之字形顺序打印二叉树
- 技术分享-ANR分析
- Android显示Unity视图
- RHEL7 下通过yum安装VNC服务
- 总线系统-第三节 总线仲裁、定时和数据传送模式
- Vijava 学习笔记之(模板生成虚拟机)
- viewstub中使用merge遇到的问题