为什么android建立在VM上(Dalvik)

时间:2010-12-20 16:37:14

标签: android dalvik

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

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

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

  1. 基于ARM的核心(可理解,ARM是移动设备的最佳选择)
  2. Linux(开源)
  3. Java VM(我的问题)
  4. 编辑:我知道java - JVM与我服务器上的C ++应用程序相同,但不是在android上运行。 关于android并非如此 - 根据我的经验,用JNI包装的C ++代码运行速度远远快于java代码(注意我甚至用java中的静态块完全相同的代码检查)我同意你的意见在任何其他平台上回答。

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

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

2)与本机代码相比,开销并不是那么好,特别是设计良好的代码经过JIT优化并且被更精心设计的gc监控。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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