Android 为什么使用 Java?

好吧,这真的应该问从谷歌的人,但我只是想要其他意见。

尽管 Android 支持本地代码应用程序,但主要的开发工具仍然是 Java。但是为什么呢?我是说,在移动设备上解读代码是不是太慢了?在介绍 Froyo 时,Google 说新的 JIT 编译器可以实现2-5倍的速度。这意味着,在本机代码上使用 Java 要慢2倍。

是的,我知道使用托管代码应用程序在系统稳定性方面更安全,因为虚拟机对程序执行有更好的控制,但是性能下降仍然很大,我不明白为什么要使用它。

104034 次浏览

首先,这和 Windows Mobile 或者 iPhone 是一回事。Net 框架需要自己的 VM 以及可可。

即使性能不是最好的,因为它是字节码的一种解释,android 带来了整个 Java 社区作为潜在的开发人员。更多的应用程序,更多的客户端,等等。

最后,没有什么性能是不那么糟糕的,这就是为什么 Java 甚至被用在更小的设备上(参见 JavaMe)。

新的 JIT 运行应用程序的速度是旧的 dalvikVM (两者都是 JAVA)的2-5倍。所以比较不是 C/JAVA,而是 JIT/dalvikVM。

在字节码级别上,Android 不使用 Java,源代码是 Java,但它不使用 JVM。

对于谷歌在 Android 中使用 Java,有一个相当有说服力的理由: 它有一个庞大的开发者基础。所有这些开发人员都准备好为他们的移动平台开发了。

Keep in mind that, technically speaking, Android does not use 纯洁 Java.

The improvement to system stability is 非常重要 on a device like a cell phone.

安全性更为重要。Android 环境允许用户运行不完全信任的应用程序,这些应用程序可以利用手机的真正不愉快的方式而没有优秀的安全性。通过在虚拟机中运行所有应用程序,您可以保证没有应用程序可以利用操作系统内核,除非 VM 实现中存在缺陷。反过来,VM 实现可能很小,并且具有一个小的、定义良好的安全表面。

Perhaps most important, when programs are compiled to code for a virtual machine, they do not have to be recompiled for new hardware. The market for phone chips is diverse and rapidly-changing, so that's a big deal.

Also, using Java makes it less likely that the apps people write will be exploitable themselves. No buffer-overruns, mistakes with pointers, etc...

首先,根据谷歌的说法,Android 并不使用 Java。这就是甲骨文起诉谷歌的原因。甲骨文声称 Android 侵犯了一些 Java 技术,但谷歌说是 Dalvik。

Secondly, I haven't seen a Java byte code interpreter since 1995.

你能用一些实际的基准来支持你的性能推测吗?鉴于你提供的背景信息不准确,你的推测范围似乎不合理。

一些观点:

  1. Java 是一种众所周知的语言,开发人员知道它,不需要学习它

  2. it's harder to shoot yourself with Java than with C/C++ code since it has no pointer arithmetic

  3. 它在虚拟机中运行,所以不需要为每部手机重新编译,而且容易保护

  4. 大量的 Java 开发工具(见第一点)

  5. 一些移动电话已经使用了 Java ME,所以 Java 在业界很出名

  6. 速度差异对于大多数应用程序来说都不是问题; 如果是的话,你应该用低级语言编写代码

本机代码不一定比 Java 代码快。显示本机代码运行速度更快的配置文件数据在哪里?

为什么是 Java?

  • Android 在许多不同的硬件平台上运行。您需要为每个不同的平台编译和优化您的本机代码,才能看到任何真正的好处。

  • 有大量的开发人员已经精通 Java。

  • Java 有巨大的开源支持,有许多库和工具可以使开发人员的生活更加轻松。

  • Java 可以保护您避免本机代码中固有的许多问题,比如内存泄漏、错误的指针使用等等。

  • Java 允许他们创建沙盒应用程序,并创建一个更好的安全模型,这样一个糟糕的应用程序就不能摧毁整个操作系统。

正如其他地方提到的,主要的问题是 Android 是作为一个便携式操作系统设计的,可以在各种各样的硬件上运行。 它还建立在许多现有移动开发人员熟悉的框架和语言之上。

最后,我要说这是对未来的赌注——随着硬件的改进,不管存在什么性能问题都将变得无关紧要——同样,通过让开发人员针对抽象编写代码,谷歌可以比开发人员使用 POSIX/Unix API 编写代码更容易地剥离和改变底层操作系统。

对于大多数应用程序来说,使用基于 VM 的语言而不是本机语言的开销并不大(使用 Web 服务(如 Twitter)的应用程序的瓶颈主要是网络)。PalmWebOS 也证明了这一点——它使用 JavaScript 而不是 Java 作为主要语言。

鉴于几乎所有的 VM JIT 都可以编译成本机代码,因此原始代码的速度通常可以与本机代码相媲美。许多由高级语言引起的延迟与 VM 开销的关系要小于其他因素(复杂的对象运行时、通过边界检查来检查内存访问的“安全性”等等)。

还要记住,不管用于编写应用程序的语言是什么,许多实际工作都是在较低级别的 API 中完成的。顶级语言通常只是将 API 调用链接在一起。

当然,这个规则有很多例外——游戏、音频和图形应用程序挑战了手机硬件的极限。即使在 iOS 平台上,开发人员也经常使用 C/C + + 来提高这些领域的速度。