`

Android面试之---Android的虚拟机Dalvik 介绍

阅读更多

Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。一直以来都有人在猜测,选择基于寄 存器的方式是因为它对提前优化(ahead-of-time optimization)提供了更好的支持,而这对类似于移动电话这样的受限环境是颇有裨益的。另一份针对基于寄存器虚拟机和基于栈虚拟机更深入的比较 分析指出,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

  Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。Neil Bartlett指出,给每一个应用赋予独立的进程可以允许动态安装、激活和去激活,但是他对Dalvik为什么要选择这种方式而没有使用OSGi在单一 进程中实现表示疑问——Radoslav Gerganov回复说,独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。Carl Rosenberger也指出OSGi也可以被移植到Android平台,而Jilles van Gurp对Google为何选择重新实现若干组件,如跨进程通信,表示疑问。

  此外,Java也已经不再是人们在Dalvik上开发所选择的唯一语言了——已经有人在Dalvik上运行Scala取得了成功,并且Hecl 也已经被成功移植了。另外更有人对运行Groovy做了一次尝试,不过目前为止还不怎么成功。Mono项目的创始人Miguel de Icaza也对在Dalvik源码公开之后将Mono整合到Dalvik上表示了兴趣,而且也已经有人猜测如何用多种方式来实现整合了,包括与随 Android SDK提供的Java到Dalvik重编译器类似的CIL(Common Intermediate Language,通用中间语言)到Dalvik重编译器。

  Dalvik的诞生也导致人们开始忧虑Java平台的第一次大规模的分道扬镳或许已经是进行时了——有人已经把Davlik和微软的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,因为运营商可以在不花费 许可费用的情况下使用和修改它

分享到:
评论

相关推荐

    Android面试之-Android系统架构图及简单的系统架构介绍.doc

    每个Android应用都在自己的进程中运行,每个进程都有一个独立的Dalvik虚拟机实例。Dalvik虚拟机执行.dex格式的代码,专为低内存环境优化。它依赖Linux内核的线程管理和内存管理。 4. **Linux内核** Android的核心...

    安卓Android源码——面试题-.zip

    在安卓开发领域,掌握Android源码对于提升技能和理解系统底层运作至关重要,特别是在面试环节,对源码的理解往往能体现一个开发者的深度。本资料"安卓Android源码——面试题-"将聚焦于Android源码相关的面试问题,...

    安卓Android源码——面试题-.rar

    6. **内存管理**:包括Dalvik/ART虚拟机的垃圾回收机制,了解内存泄漏检测和性能优化的方法。 7. **权限管理**:Android的权限模型涉及到AMS、PMS(Package Manager Service)和AMS的交互,理解权限的申请、检查和...

    _Android面试题

    【Android面试题】详解 1. Android系统架构 Android系统的架构可以分为四个主要层次:Linux内核层、运行库层、应用程序框架层和应用程序层。 - Linux kernel:这是最底层,负责硬件驱动、网络管理、电源控制、...

    android面试题大全及答案

    - DVM(Dalvik虚拟机)是Android系统中运行应用程序的虚拟机。每个Android应用在各自的进程中运行,都有一个独立的DVM实例。而在Linux操作系统中,这些DVM实例对应为单独的进程,所以可以说DVM进程与Linux进程是同...

    Android面试总结精华

    ### Android面试总结精华 在本篇文章中,我们将深入探讨一份由网络搜集整理的Android面试题集,这份资料不仅包含了常见的面试题目,还针对部分题目提供了详细的解答,旨在帮助准备参加Android开发岗位面试的朋友更...

    百度Android工程师面试题.pdf

    Android应用程序的运行基于Dalvik虚拟机(DVM),每个应用都在其独立的进程中运行,具有单独的DVM实例。DVM是在Linux内核中作为一个进程存在的,因此可以说Android应用进程与Linux进程在概念上是相同的。 2. **SIM...

    Android面试宝典大全

    【Android面试宝典大全】 在Android开发者的世界里,面试是检验技能、经验和知识深度的关键环节。这份"Android面试宝典大全"旨在为准备面试的开发者提供全面而深入的指导,帮助他们更好地理解Android系统的核心机制...

    android面试选择题汇总

    【Android面试选择题汇总】 1. 关于 Android DVM (Dalvik 虚拟机) 和 Linux 进程: 正确答案是 d. DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例...

    Android面试题

    根据提供的文件信息,以下是对"Android面试题"相关知识点的详细阐述: Android历史 - Android由Andy Rubin(安迪鲁宾)创立,他是被大众认为的“Android之父”。 - Android是一个开源的移动操作系统,被广泛应用于...

    android面试题集锦

    在准备Android面试时,了解和掌握相关知识点至关重要。以下是一些关键点的详细解析: 1. **接口与抽象类的区别**: - 接口:接口完全由抽象方法组成,不包含任何具体实现,用于定义行为规范,允许多重继承。 - ...

    某课XXX面试之谈解密Android

    - **库和Android运行时**:包括核心库和Dalvik虚拟机(DVM)或ART(Android Runtime)。 - **硬件抽象层(HAL)**:提供了对底层硬件的访问接口。 - **Linux内核**:负责硬件驱动管理等低级系统服务。 2. **...

    2017Android面试试题

    Dalvik虚拟机是Android系统使用的专有虚拟机,它使用dex格式的字节码,基于寄存器架构。相比之下,Java虚拟机(JVM)基于栈架构,执行.class字节码。Dalvik设计时考虑了移动设备资源有限的特点,优化了内存和性能。 ...

    Android面试题大全(非常详细,而且实用)

    ### Android面试题详解 #### 一、Android系统架构 Android操作系统采用了典型的分层架构设计,由下至上分为以下几个层次: 1. **Linux Kernel (Linux内核层)**:这是Android架构的最底层,提供了核心系统服务,如...

    android面试题.docx

    本篇文章将详细介绍 Android 面试题中涉及到的知识点,包括 Android 基础知识、进程和线程、内存管理、实时操作系统、动画、Handler 机制、MVC 模式、Android 的优点和不足之处等。 一、Android 基础知识 Android ...

    Android相关高频面试题.zip

    这份"Android相关高频面试题.zip"文件包含了一系列中高级Android面试题目,旨在帮助开发者提升自己的专业技能,顺利通过年薪50W+的面试。以下将对这些面试题目的相关知识点进行详细解读。 1. **Android体系结构**:...

    Android面试题附答案

    - DVM(Dalvik Virtual Machine)是Android早期使用的虚拟机,每个Android应用在自己的进程中运行,拥有独立的DVM实例。这些DVM实例运行于Linux内核之上的进程,因此可以说DVM进程和Linux进程是同一个概念。 2. **...

    android面试题.rar

    - 运行时环境包括Dalvik虚拟机和ART(Android RunTime),负责程序执行。 - 应用程序框架提供了各种服务和组件交互机制。 - 应用程序层包含用户直接使用的各种应用。 2. **Activity生命周期**: - Activity有...

    Android技术面试资料整理

    - **DVM**:Dalvik Virtual Machine,是Android平台上的虚拟机。 - **Linux进程**:Android运行在Linux内核之上,每个应用程序都运行在一个独立的Linux进程中。 - **应用程序进程**:指运行在DVM之上的应用程序进程...

    Android面试题 答案精编第三版

    10. **内存管理**:理解Dalvik/ART虚拟机的工作原理,分析内存泄漏的方法(如MAT工具),以及如何避免内存泄漏。 11. **权限管理**:熟悉Android的权限模型,如何在Manifest中声明权限,以及6.0及以上版本的运行时...

Global site tag (gtag.js) - Google Analytics