上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > 电脑怎么了 > android虚拟机:Dalvik

android虚拟机:Dalvik

作者:上犹日期:

返回目录:电脑怎么了

今天小编给各位分享安卓虚拟机的知识,文中也会对其通过android虚拟机:Dalvik和安卓系统是用java开发的吗?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:
  • android虚拟机:Dalvik
  • 安卓系统是用java开发的吗?
  • Dalvik是什么?有什么用
  • Android 中的Dalvik和ART是什么,有啥区别
  • 一、android虚拟机:Dalvik

    Dalvik[Google公司设计的虚拟机] - 头条百科 - 今日头条

    Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

    发展

    Dalvik的诞生也导致人们开始忧虑Java平台的第一次大规模的分道扬镳或许已经是进行时了——有人已经把Dalvik和微软的JVM以及Sun对微软的诉讼联系起来,等着看Google身上是否也会发生类似事情;另外一些人则指出,Google并没有宣称Dalvik是一个Java实现,而微软却是这样做的。Sun也对可能带来的阵营分裂表达了忧虑情绪,并提出和Google合作来保证Dalvik和JVM之间的兼容性——Google对此的解释是,Dalvik是对解决目前Java ME平台上分裂的一次尝试,也是为了提供一个拥有较少限制许可证的平台。甚至还有人怀疑这是否是Sun和Google两大阵营对Java之未来的一次大规模较量。Ian Skerret认为,Dalvik的诞生是对Sun尝试控制和保护来自Java ME收入来源的一次反应,以及对建立OpenJDK统辖理事会迟迟未果的回答。

    这也导致Dalibor Topic怀疑Google是否要重履Sun走过的路:

    当然,一个很有意思的问题是,为什么没人有勇气拿Google关于OpenJDK的问题反过来问Google呢?

    虽然Android号称开源,但它仍是专有产品。Android做过兼容性保证,是在秘密会议室中签署和保管的。

    Android不具备任何治理模型,也没有证据指出将来会出现治理模型。Android没有规范,并且它的许可证禁止任何替代实现的开发,因为这并非Google在SDK许可证中授权许可的使用权。Android完全在Google的掌控之下,一旦有竞争性应用在财政上损害了Google的利益,Google是保有一刀抹杀这些应用的权利的。从设计伊始,Android就受到限制,只能在Google的财务利益允许的条件内开放。专有的Java也是旧瓶装新酒而已。这就好像大家在见证JCP的重生一样,人们排着队把开源社区的“街头信誉”在一个单一的、专有的实现的基础上借给另外一个封闭的厂商垄断集团。只不过这次的大头改姓Google,而不是Sun了。(不过大家在叫唤着开源的时候,却似乎全都忘记了开发这一系列软件本身需要巨大的投入,因此利益在前,这其实也无可厚非。)

    Stefano Mazzocchi发布了一篇分析报告,深切入里地探讨了围绕Java ME和Dalvik的许可证问题,他得出结论说,Dalvik的市场定位良好,足以给移动电话市场带来冲击。尽管Google一直都很小心避免引起诉讼的几个关键点,但Mazzocchi相信Sun还是会起草知识产权案的状告书(IBM也有可能)。他还指出,由于在JCP之外操作,Google可以非常快地对Android进行更改,而且可以避开Sun对任何JCP更动的否决权——这样他们也可以为诸如USB和蓝牙这样的组件加入接口,而这些组件在基础Java ME实现中是不可用的。

    最后,通过在Apache许可证下授权许可Dalvik的源码,移动电话运营商更有可能采用Dalvik,因为运营商可以在不花费许可费用的情况下使用和修改它。

    此外,Java也已经不再是人们在Dalvik上开发所选择的唯一语言了——已经有人在Dalvik上运行Scala取得了成功,并且Hecl也已经被成功移植了。另外更有人对运行Groovy做了一次尝试,不过目前为止还不怎么成功。Mono项目的创始人Miguel de Icaza也对在Dalvik源码公开之后将Mono整合到Dalvik上表示了兴趣,

    而且也已经有人猜测如何用多种方式来实现整合了,包括与随Android SDK提供的Java到Dalvik重编译器类似的CIL(Common Intermediate Language,通用中间语言)到Dalvik重编译器。

    ( dx是一套工具,可以将 Java .class 转换成 .dex 格式. 一个dex档通常会有多个.class。由于dex有时必须进行最佳化,会使档案大小增加1-4倍,以ODEX结尾。)

    Dalvik和标准Java虚拟机(JVM)首要差别

    Dalvik 基于寄存器,而 JVM 基于栈。

    基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短。(Also of register-based VMs allow faster execution times at the expense of programs which are larger after compilation.)

    Dalvik和Java运行环境的区别

    1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。

    2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

    3:不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex

    4:dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。

    5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。

    6:所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制

    7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。

    8:Dalvik是由Dan Bornstein编写的,名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛Eyjafjörður。

    前景

    很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如IOS的根源。

    2014年6月25日,Android L 将正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。

    由于ART的出现,使Dalvik在安卓系统应用方面注定成为历史。

    架构

    不同于其他堆栈结构的Java虚拟机,dalvik采用的是基于寄存器的架构。

    dx工具将部分(但不是全部)Java的.class文件转换成.dex格式。多个类被包含在一个.dex文件中。为了节省空间,各个类文件中重复的字符串和其他常数只在.dex输出中存放一次。Java字节码被转换成Dalvik虚拟机所使用的替代指令集。一个未压缩的.dex文件通常比来自相同.class文件的已压缩.jar文档小。

    当被安装到移动设备时,Dalvik可执行文件可能会被修改。为了进一步优化,虚拟机可能会调整文件内部分数据的端序、内联一些函数和简单的结构体、并短路掉一些不必要的操作等。

    自Android 2.2开始,Dalvik支持JIT(just-in-time,即时编译技术)。

    优化后的Dalvik较其他标准虚拟机存在一些不同特性

    ·占用更少空间

    ·为简化翻译,常量池只使用32位索引

    ·标准Java字节码实行8位堆栈指令。Dalvik使用16位指令集直接作用于局部变量。局部变量通常来自4位的“虚拟寄存器”区。这样减少了Dalvik的指令计数,提高了翻译速度。

    当Android启动时,Dalvik VM 监视所有的程序(APK),并且创建依存关系树,为每个程序优化代码并存储在Dalvik缓存中。Dalvik第一次加载后会生成Cache文件,以提供下次快速加载,所以第一次会很慢。

    Dalvik解释器采用预先算好的Goto地址,每个指令对内存的访问都在64字节边界上对齐。这样可以节省一个指令后进行查表的时间。为了强化功能, Dalvik还提供了快速翻译器(Fast Interpreter)。

    性能

    基于堆栈的机器与基于寄存器的机器谁更有优势一直是个争论不休的话题。

    一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。这种差异主要是VM机对的操作码调度造成的,它们往往比其他的因素昂贵,比如说及时汇编。

    然而,2010年,在Oracle公司(Java技术的拥有者)嵌入式设备上的标准非图形化性能测试表明,Android 2.2(最初的版本包括一个即时编译器)比Java SE嵌入式设备(两者都基于 Java SE 6)慢2-3倍。

    类库

    Dalvik虚拟机既不支持Java SE 也不支持Java ME类库(如:Java类,AWT和Swing都不支持)。相反,它使用自己建立的类库(Apache Harmony Java的一个子集)。

    其他

    许可与专利

    Dalvik是基于Apache License 2.0发布的。Google说Dalvik是一个清洁室(clean room)的实现,而不是一个在标准Java运行环境的改进,这意味着它不继承标准版本的或开源的Java运行环境的版权许可限制。关于这一点,Oracle和一些专家还在讨论中。

    已于2009年4月收购Sun(Sun Microsystems)的Oracle获得了Java的专利,在2010年8月12日起诉Google侵犯其版权和专利。Oracle声明,Google在开发Android当中直接并且多次侵犯关于Java的知识产权。在2012五月,陪审团认为Google没有侵犯Oracle的专利,法官认定Google所使用的Java APIs没有版权。双方同意零美元法定赔偿的9行复制代码(9 lines of copied code)。

    非Android平台

    2011年,Myriad Group软件公司公布了除了android以外一个新的Dalvik虚拟机平台端口“Alien Dalvik”。

    一、安卓系统是用java开发的吗?

    安卓应用是使用Java开发的。学习java开发,推荐千锋教育,千峰教研院联合国内一线互联网企业深化产业变革,共同打造互联网技术生态共同体,形成以“教”“研“”学”为核心的综合性教育平台,值得选择。

    安卓是基于linux的开源操作系统,linux是使用标准C语言开发的操作系统,安卓底层驱动以及操作系统内核使用C语言以及汇编开发。安卓操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,实现操作系统底层调度。安卓应用是使用Java开发;同时也可以使用C/C++ native开发,但是多数时候不用用到C。所以基本上就是Java为标准开发语言。安卓使用了修改过的JVM(Java虚拟机)叫做dalvik虚拟机,其本质还是Java虚拟机。所以对应每一个APP都会创建个dalvik虚拟机,也就是一个linux进程,其实就是基于linux下的修改版Java虚拟机,运行java程序。

    想要了解更多有关于java开发的相关问题,。千锋教育面授课程包括:HTML5大前端培训、Java+分布式开发培训、Python人工智能+数据分析培训、全领域实战UI/UE设计设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、网络安全培训、区块链培训、影视剪辑包装培训、游戏原画培训、全媒体运营培训等,实力强大,欢迎咨询。

    二、Dalvik是什么?有什么用

    简单点说:Dalvik是Android系统中另一个重要的部分,包括虚拟机和一组重要的运行环境。它的设计非常巧妙,是个很好的一个手机终端的底层应用

    三、Android 中的Dalvik和ART是什么,有啥区别

    Dalvik模式像是一台折叠自行车,每次骑之前都要组装后才能上路。而ART模式就是一个已经装好的自行车,直接就能上车走人。所以ART模式在效率上肯定是要好于Dalvik。

    通过以上这种表格,我们可以直白的看出,全新的ART模式具备用RAM内存小、流畅度更好以及更省电的特性。

    1:ART模式是Android runtime的简称。在ART虚拟机环境下,Android对程序只进行一次编译,就是在程序安装时。在安装应用时,ART虚拟机就先将程序的Java语言转化为适合Android系统运行的机器语言,而且是一次编译终身受用。这样就免于程序每次运行时,都要重新编译的麻烦了,系统的运行效率被大大提高。

    2:Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

    关于安卓虚拟机的问题,通过《Dalvik是什么?有什么用》、《Android 中的Dalvik和ART是什么,有啥区别》等文章的解答希望已经帮助到您了!如您想了解更多关于安卓虚拟机的相关信息,请到本站进行查找!

    本文标签:安卓虚拟机(3)

    相关阅读

    • android虚拟机:Dalvik

    • 上犹电脑怎么了
    • 今天小编给各位分享安卓虚拟机的知识,文中也会对其通过android虚拟机:Dalvik和安卓系统是用java开发的吗?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现
    • 托福听力对话考点解析

    • 上犹电脑怎么了
    • 今天小编给各位分享prepare的知识,文中也会对其通过托福听力对话考点解析和托福听力解析:为什么对话类题目错误率更高?麻烦告诉我等多篇文章进行知识讲解,如果文章内容对您有
    • 中国谚语英语翻译大全-9

    • 上犹电脑怎么了
    • 今天小编给各位分享inherit的知识,文中也会对其通过中国谚语英语翻译大全-9和英语翻译成中国谚语 特急啊!!!等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站
    关键词不能为空
    极力推荐

    电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

    关于我们