为什么android是建立在VM(Dalvik)[关闭]

问题描述 投票:20回答:4

我很想知道google选择在java VM上开发android框架的原因。

在为Android编写代码近6个月的过程中,我观察到在资源有限的平台上运行VM的代码非常慢。涉及很多开销。我知道java是可移植的等等,是不是可以使用本机语言并获得VM提供的性能和功能?对于面向性能的应用程序,仍然最终编写本机代码并用JNI包装它,

那么谷歌为什么选择这个特定的堆栈:

  1. 基于臂的核心(可理解,ARM是移动设备的最佳选择)
  2. Linux(开源)
  3. Java VM(我的问题)

编辑:我知道java - JVM与我服务器上的C ++应用程序相同,但不是在android上运行。关于android并非如此 - 根据我的经验,用JNI包装的C ++代码运行速度远远快于java代码(注意我甚至用java中的静态块完全相同的代码检查)我同意你的意见在任何其他平台上回答。

android dalvik
4个回答
5
投票

Dalvik VM使用自己的字节码,而不是Java字节码。它设计得非常快(相对而言)。我认为它的标题中的“VM”部分是一个红色的鲱鱼,因为人们倾向于认为无论如何它都会“慢”。你自己说过,你正在使用一个“资源有限的平台” - 这可能是导致性能下降的主要原因,远比Dalvik VM更重要。

免责声明:我不是任何方式,形状或形式的Dalvik或Android专家。然而,看起来人们可能倾向于根据诸如“它使用虚拟机”和“你用Java编写应用程序”之类的想法对Android做出很多假设,而不是进一步研究平台。

有关您在Dalvik VM Internals上可能想知道的更多信息,请参阅this video(来自Google I / O 2008)。


2
投票

1)据我所知,Java是大学中最普遍教授的语言,甚至是高中/同等学历。它在专业领域得到广泛应用,并且拥有大量代码库,可帮助开发人员更快地创建更高质量的应用程序。

2)与本机代码相比,开销并不是那么好,特别是对于经过精心设计的JIT优化代码以及由更精心设计的gc进行监控的代码。

实际上,我认为仅凭这两个原因就可以证明为什么选择Java作为Android支持的主要语言。


0
投票

我认为关键是,不要考虑与您认为的Destkop或服务器虚拟化相同的Java VM - 它们是非常不同的。在最基本的层面上,Java VM(在这种情况下为Dalvik)只是由“编译器”生成的本地机器代码中的字节码之间的转换层。它是一个虚拟机 - 但它没有与VirtualBox中运行Ubuntu相同的开销。


0
投票

Java应用程序已被证明(并非总是)与使用c,c ++等语言编写的应用程序一样快速,流畅地运行。请参阅此reference,查看PDF文件。许多人说java和vm很慢而没有实际的证据或细节 - 这个参考有一些细节

Java是一种广为人知的语言,很容易上手。将android sdk和工具交给所有知道Java的人已经允许Android市场具有为其用户提供大量应用程序的巨大潜力。

免责声明:我不是这方面的专家,只是我的2美分

© www.soinside.com 2019 - 2024. All rights reserved.