好的,应该确实向Google的某人问这个问题,但是我只想提出其他意见。
甚至Android也支持本机代码应用程序,主要的开发工具是Java。但为什么?我的意思是,在移动设备上解释代码是否太慢?Google在介绍Froyo时说,新的JIT编译器可以使应用程序速度提高2-5倍。这意味着通过本机代码使用Java的速度要慢2倍。
是的,我知道使用托管代码应用程序在系统稳定性方面更加安全,因为虚拟机可以更好地控制程序,但是,这种性能下降仍然很大,我看不出为什么要使用它。
好的,应该确实向Google的某人问这个问题,但是我只想提出其他意见。
甚至Android也支持本机代码应用程序,主要的开发工具是Java。但为什么?我的意思是,在移动设备上解释代码是否太慢?Google在介绍Froyo时说,新的JIT编译器可以使应用程序速度提高2-5倍。这意味着通过本机代码使用Java的速度要慢2倍。
是的,我知道使用托管代码应用程序在系统稳定性方面更加安全,因为虚拟机可以更好地控制程序,但是,这种性能下降仍然很大,我看不出为什么要使用它。
Answers:
一些要点:
Java是一种已知的语言,开发人员知道它,而不必学习它
使用Java比使用C / C ++代码更难射击,因为它没有指针算法
它在VM中运行,因此无需为那里的每部电话重新编译它,并且易于保护
大量的Java开发工具(请参见第1点)
几款手机已经使用Java ME,因此Java在业界已广为人知
对于大多数应用而言,速度差异不是问题;如果是的话,您应该使用低级语言编写代码
在字节码级别,Android不使用Java。源是Java,但不使用JVM。
系统稳定性的提高是 在诸如手机之类的设备上非常重要。
安全性甚至更为重要。Android环境允许用户运行半信任的应用程序,这些应用程序可能会以真正令人不快的方式利用手机而没有出色的安全性。通过在虚拟机中运行所有应用程序,可以确保除非VM实施存在缺陷,否则任何应用程序都无法利用OS内核。相应地,VM实施可能很小,并且具有小的,定义明确的安全性表面。
也许最重要的是,当程序被编译为虚拟机的代码时,不必为新硬件而重新编译它们。手机芯片市场是多种多样且瞬息万变的,因此这很重要。
同样,使用Java使得人们编写的应用程序更容易被自己利用。没有缓冲区溢出,指针错误等。
本机代码不一定比Java代码快。您的个人资料数据在哪里显示本机代码可以运行得更快?
为什么选择Java?
Android可在许多不同的硬件平台上运行。您将需要针对这些不同平台中的每一个编译并优化您的本机代码,以查看任何真正的好处。
已经有许多开发人员精通Java。
Java具有强大的开源支持,提供了许多库和工具,可简化开发人员的生活。
Java保护您免受本机代码固有的许多问题的困扰,例如内存泄漏,错误的指针使用等。
Java允许他们创建沙箱应用程序,并创建更好的安全模型,以使一个不良的应用程序无法关闭整个操作系统。
Java对于谷歌在Android中使用Java有一个令人信服的论点:它拥有大量的开发人员。所有这些开发人员都准备好为其移动平台进行开发。
请记住,从技术上讲,Android不使用纯 Java。
正如其他地方所提到的那样,主要问题是Android被设计为可移植的OS,可以在各种硬件上运行。它还建立在许多现有移动开发人员熟悉的框架和语言上。
最后,我要说这是对未来的赌注-无论存在什么性能问题都将随着硬件的改进而变得无关紧要-同样地,通过让开发人员根据抽象进行编码,Google可以比以前更容易地剥离和更改底层操作系统开发人员正在对POSIX / Unix API进行编码。
对于大多数应用程序,在本机上使用基于VM的语言的开销并不重要(使用Web服务(如Twitter)的应用程序的瓶颈主要是网络)。Palm WebOS也演示了这一点-并且使用JavaScript而不是Java作为主要语言。
鉴于几乎所有的JIT虚拟机都可以编译为本地代码,因此原始代码的速度通常可与本地速度相媲美。与其他因素(复杂的对象运行时,通过执行边界检查来“安全”检查内存访问等)相比,归因于高级语言的许多延迟与VM开销的关系较小。
还请记住,无论用于编写应用程序的语言是什么,许多实际工作都是在较低级别的API中完成的。顶级语言通常只是将API调用链接在一起。
当然,该规则也有许多例外情况-游戏,音频和图形应用程序会限制电话硬件的使用。即使在iOS上,开发人员也经常使用C / C ++来加快这些领域的速度。
首先,对于Windows Mobile或iPhone,.net框架需要自己的VM和可可粉。
即使性能不是最好的,因为它是对字节码的一种解释,所以android将整个java社区带入了潜在的开发人员。更多的应用程序,更多的客户,等等。
最后,性能还不错,这就是为什么即使在较小的设备上也使用Java的原因(请参阅JavaMe)。