为什么Android使用Java?
好的,这应该真的被问到谷歌的人,但我只是想要其他意见。
即使Android支持本地代码应用程序,主要的开发工具是Java。 但为什么? 我的意思是,在移动设备上解释代码不是太慢吗? Google在介绍Froyo时表示,新的JIT编译器可以实现2-5倍的应用程序。 这意味着,通过本地代码使用Java是慢了2倍。
是的,我知道使用托pipe代码应用程序在系统稳定性方面是比较安全的,因为虚拟机对程序有更好的控制,但是这种性能下降是巨大的,我没有看到为什么要使用它。
一些观点:
-
Java是一种已知的语言,开发人员知道它并不需要学习它
-
因为它没有指针算术,所以使用Java比使用C / C ++代码更难
-
它运行在一个虚拟机,所以没有必要重新编译每一个电话,并容易安全
-
大量的Java开发工具(见第1点)
-
几款手机已经使用了Java ME,所以Java在业内已经知道了
-
速度差异对于大多数应用而言不是问题; 如果是的话,你应该用低级语言编码
在字节码级别,Android不使用Java。 源是Java,但不使用JVM。
系统稳定性的提高对手机等设备来说非常重要 。
安全性更重要。 Android环境让用户运行半信赖的应用程序,可以真正不愉快的方式利用手机没有优良的安全性。 通过在虚拟机中运行所有应用程序,您可以保证没有应用程序可以利用操作系统内核,除非在虚拟机实施中存在缺陷。 反过来,虚拟机的实现可能很小,并具有一个小的,明确的安全表面。
也许最重要的是,当编译程序编写虚拟机代码时,不必重新编译新硬件。 手机芯片的市场是多样的,变化迅速,这是一个很大的问题。
此外,使用Java使得人们撰写的应用程序自己可以被利用的可能性也越小。 没有缓冲区溢出,指针错误等…
本地代码不一定比Java代码更快。 你的个人资料数据在哪里显示,本地代码可以运行得更快?
为什么是Java?
-
Android在许多不同的硬件平台上运行。 您需要为这些不同的平台编译和优化您的本地代码,才能看到真正的好处。
-
有很多开发人员已经熟练掌握Java。
-
Java拥有巨大的开源支持,许多库和工具可以让开发人员更轻松。
-
Java可以保护您免受本地代码中固有的许多问题的困扰,例如内存泄漏,指针使用不当等。
-
Java允许他们创build沙箱应用程序,并创build一个更好的安全模型,以便一个不好的应用程序不能取消你的整个操作系统。
对于谷歌在Android中使用它,Java有一个非常有说服力的理由:它拥有庞大的开发者基础。 所有这些开发者都准备好开发移动平台。
请记住,从技术上讲,Android不使用纯 Java。
首先,根据谷歌,Android不使用Java。 这就是为什么甲骨文起诉谷歌。 甲骨文声称,Android侵犯了一些Java技术,但谷歌说这是Dalvik。
其次,自1995年以来,我还没有见过一个Java字节码解释器。
你能用一些实际的基准来支持你的性能猜测吗? 由于您提供的背景信息不准确,您推定的范围似乎不合理。
正如其他地方所谈到的那样,主要问题在于Android被devise为便携式操作系统,可以在各种硬件上运行。 它也build立在许多现有移动开发者熟悉的框架和语言上。
最后,我会说这是对未来的赌注 – 无论性能问题如何,随着硬件的改进都会变得无关紧要 – 同样,通过让开发人员对抽象进行编码,Google可以更轻松地剔除和更改底层操作系统开发人员正在编码到POSIX / Unix API。
对于大多数应用程序来说,使用基于虚拟机的本地语言的开销并不显着(应用程序使用Web服务的瓶颈,比如Twitter,主要是联网)。 Palm WebOS也演示了这一点,并且使用JavaScript而不是Java作为主要语言。
鉴于几乎所有的虚拟机JIT编译到本地代码,原始代码的速度往往可以与本地速度相媲美。 与其他因素(复杂的对象运行时,'安全'通过执行边界检查等来检查内存访问等)相比,归因于高级语言的许多延迟与虚拟机开销相比较less。
另外请记住,不pipe用于编写应用程序的语言如何,大部分的实际工作都是在较低级别的API中完成的。 顶级语言通常只是将API调用链接在一起。
当然,这个规则有很多例外 – 游戏,audio和graphics应用程序,这些应用程序可以推动手机硬件的极限。 即使在iOS上,开发人员也往往会下降到C / C ++以获得这些领域的速度。
新的JIT运行的应用程序比旧的dalvikVM(都是JAVA)快2 – 5倍。 所以比较JAVA不是C,而是通过dalvikVM进行JIT。
首先它和windows mobile或者iPhone大致相同,.net框架需要自己的虚拟机和cocoa。
即使性能不是最好的,因为这是对字节码的解释,但是Android将整个Java社区作为潜在的开发者。 更多的应用程序,更多的客户等
为了完成,没有性能不是那么糟糕,这就是为什么甚至在较小的设备上使用Java(参见JavaMe)。