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应用都在自己的进程中运行,每个进程都有一个独立的Dalvik虚拟机实例。Dalvik虚拟机执行.dex格式的代码,专为低内存环境优化。它依赖Linux内核的线程管理和内存管理。 4. **Linux内核** Android的核心...
在安卓开发领域,掌握Android源码对于提升技能和理解系统底层运作至关重要,特别是在面试环节,对源码的理解往往能体现一个开发者的深度。本资料"安卓Android源码——面试题-"将聚焦于Android源码相关的面试问题,...
6. **内存管理**:包括Dalvik/ART虚拟机的垃圾回收机制,了解内存泄漏检测和性能优化的方法。 7. **权限管理**:Android的权限模型涉及到AMS、PMS(Package Manager Service)和AMS的交互,理解权限的申请、检查和...
【Android面试题】详解 1. Android系统架构 Android系统的架构可以分为四个主要层次:Linux内核层、运行库层、应用程序框架层和应用程序层。 - Linux kernel:这是最底层,负责硬件驱动、网络管理、电源控制、...
- DVM(Dalvik虚拟机)是Android系统中运行应用程序的虚拟机。每个Android应用在各自的进程中运行,都有一个独立的DVM实例。而在Linux操作系统中,这些DVM实例对应为单独的进程,所以可以说DVM进程与Linux进程是同...
### Android面试总结精华 在本篇文章中,我们将深入探讨一份由网络搜集整理的Android面试题集,这份资料不仅包含了常见的面试题目,还针对部分题目提供了详细的解答,旨在帮助准备参加Android开发岗位面试的朋友更...
Android应用程序的运行基于Dalvik虚拟机(DVM),每个应用都在其独立的进程中运行,具有单独的DVM实例。DVM是在Linux内核中作为一个进程存在的,因此可以说Android应用进程与Linux进程在概念上是相同的。 2. **SIM...
【Android面试宝典大全】 在Android开发者的世界里,面试是检验技能、经验和知识深度的关键环节。这份"Android面试宝典大全"旨在为准备面试的开发者提供全面而深入的指导,帮助他们更好地理解Android系统的核心机制...
【Android面试选择题汇总】 1. 关于 Android DVM (Dalvik 虚拟机) 和 Linux 进程: 正确答案是 d. DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例...
根据提供的文件信息,以下是对"Android面试题"相关知识点的详细阐述: Android历史 - Android由Andy Rubin(安迪鲁宾)创立,他是被大众认为的“Android之父”。 - Android是一个开源的移动操作系统,被广泛应用于...
在准备Android面试时,了解和掌握相关知识点至关重要。以下是一些关键点的详细解析: 1. **接口与抽象类的区别**: - 接口:接口完全由抽象方法组成,不包含任何具体实现,用于定义行为规范,允许多重继承。 - ...
- **库和Android运行时**:包括核心库和Dalvik虚拟机(DVM)或ART(Android Runtime)。 - **硬件抽象层(HAL)**:提供了对底层硬件的访问接口。 - **Linux内核**:负责硬件驱动管理等低级系统服务。 2. **...
Dalvik虚拟机是Android系统使用的专有虚拟机,它使用dex格式的字节码,基于寄存器架构。相比之下,Java虚拟机(JVM)基于栈架构,执行.class字节码。Dalvik设计时考虑了移动设备资源有限的特点,优化了内存和性能。 ...
### Android面试题详解 #### 一、Android系统架构 Android操作系统采用了典型的分层架构设计,由下至上分为以下几个层次: 1. **Linux Kernel (Linux内核层)**:这是Android架构的最底层,提供了核心系统服务,如...
本篇文章将详细介绍 Android 面试题中涉及到的知识点,包括 Android 基础知识、进程和线程、内存管理、实时操作系统、动画、Handler 机制、MVC 模式、Android 的优点和不足之处等。 一、Android 基础知识 Android ...
这份"Android相关高频面试题.zip"文件包含了一系列中高级Android面试题目,旨在帮助开发者提升自己的专业技能,顺利通过年薪50W+的面试。以下将对这些面试题目的相关知识点进行详细解读。 1. **Android体系结构**:...
- DVM(Dalvik Virtual Machine)是Android早期使用的虚拟机,每个Android应用在自己的进程中运行,拥有独立的DVM实例。这些DVM实例运行于Linux内核之上的进程,因此可以说DVM进程和Linux进程是同一个概念。 2. **...
- 运行时环境包括Dalvik虚拟机和ART(Android RunTime),负责程序执行。 - 应用程序框架提供了各种服务和组件交互机制。 - 应用程序层包含用户直接使用的各种应用。 2. **Activity生命周期**: - Activity有...
- **DVM**:Dalvik Virtual Machine,是Android平台上的虚拟机。 - **Linux进程**:Android运行在Linux内核之上,每个应用程序都运行在一个独立的Linux进程中。 - **应用程序进程**:指运行在DVM之上的应用程序进程...
10. **内存管理**:理解Dalvik/ART虚拟机的工作原理,分析内存泄漏的方法(如MAT工具),以及如何避免内存泄漏。 11. **权限管理**:熟悉Android的权限模型,如何在Manifest中声明权限,以及6.0及以上版本的运行时...