`
kuwoleft
  • 浏览: 1086738 次
文章分类
社区版块
存档分类
最新评论

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面试题

    Android面试之---Activity的详细讲解 这篇文章会涉及到以下几个内容 一 Activity的生命周期 二 让Activity变成一个窗口:Activity属性设定 三 你后台的Activity被系统...Android面试之---Android的虚拟机Dalvik 介绍

    百度Android工程师面试题.pdf

    百度 Android 开发面试题 1、 Android dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念 DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行, 都拥有一个独立的 Dalvik 虚拟机...

    _Android面试题

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

    android面试题大全及答案

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

    Android面试宝典大全

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

    android面试选择题汇总

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

    android面试题集锦

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

    android面试题.docx

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

    Android面试题 答案精编第三版

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

    Android面试题大全(史上最全的面试题)

    【Android面试题大全(史上最全的面试题)】 在Android开发者的世界里,面试是一个至关重要的环节,它检验了开发者对Android平台的理解深度和技术熟练度。本资料集合了多个面试题文档,涵盖了聊天项目、基础概念、...

    Android面试题3

    【Android面试题3】知识点详解 在Android开发者的职业生涯中,面试是至关重要的一步,它不仅测试了候选人的基础知识,还考察了实际项目经验和问题解决能力。以下是对"Android面试题3"中可能涉及的一些核心知识点的...

    2016年超全Android面试题 答案精编

    《2016年超全Android面试题 答案精编》是针对Android开发者进行面试准备的重要参考资料,它涵盖了Android开发中各个方面的知识点,旨在帮助求职者全面掌握面试所需的技能。以下是一些可能出现在这份面试题集中的关键...

    Android-Interview-QnA:Android面试问答

    Android面试QnA Android面试问答Q0。 简要说明Android的运行环境。 Android主要由四个执行环境组成。 从底部开始,这是Linux内核,库,应用程序框架和应用程序的顺序。 Linux内核是一个操作系统,用于管理Android...

    android面试题(集锦)

    - Android Dalvik Virtual Machine (DVM) 是Android系统中的虚拟机,它负责运行Dalvik字节码。在Linux系统中,每个DVM实例都会对应一个进程,因此,从Linux的角度看,DVM执行的应用程序确实是一个独立的进程。 2. ...

    Android面试题及答案

    "Android面试题及答案" Android面试题及答案是Android开发者的必备知识,涵盖了Java、C/C++、Android操作系统、面试题等多方面的内容。 1. Android手机操作系统的四层架构 Android手机操作系统的四层架构分别是:...

    android面试题.doc

    Android面试题涵盖了许多核心知识点,包括Android系统的架构、内存管理、操作系统类型、短信规范、动画机制、线程通信以及设计模式的应用。以下是这些面试题所涉及的详细知识点: 1. **Android DVM与Linux进程**: ...

    2015年android面试题目及其答案大全

    Android应用程序的运行基于Dalvik虚拟机(DVM),每个应用都在其独立的进程中运行,这意味着每个DVM实例都是Linux系统中的一个单独进程。因此,从某种意义上说,DVM进程与Linux进程的概念是相一致的。 2. **SIM卡...

    android面试题

    - 介绍Dalvik和ART虚拟机的区别,以及ART的优化措施。 - 了解并解释ANR(Application Not Responding)错误,如何避免和解决。 - 性能优化策略:代码优化、UI绘制优化、资源压缩等。 7. **组件间通信** - ...

    9套android经典面试题

    以上这些知识点是Android面试中常见的主题,掌握它们不仅能帮助你在面试中表现出色,还能使你在实际开发中更高效地解决问题。对于每个知识点,深入学习和实践经验是关键,不仅要理解其原理,还要学会灵活应用到项目...

Global site tag (gtag.js) - Google Analytics