为什么Android使用Java?

B.G*_*ill 112 java android

好的,这应该是谷歌的某个人,但我只想要其他意见.

即使Android支持Native代码应用程序,主要的开发工具是Java.但为什么?我的意思是,在移动设备上解释代码是不是太慢了?在介绍Froyo时,Google表示新的JIT编译器可以将应用程序的速度提高2-5倍.这意味着,使用Java而非本机代码的速度要慢2倍.

是的,我知道使用托管代码应用程序在系统稳定性方面更安全,因为虚拟机可以更好地控制程序,但是,这种性能下降是巨大的,我没有看到为什么要使用它.

jos*_*efx 97

一些要点:

  1. Java是一种已知语言,开发人员知道它并且不必学习它

  2. 因为它没有指针算法,所以使用Java比使用C/C++代码更难

  3. 它运行在VM中,因此无需为每部手机重新编译它并且易于保护

  4. 大量用于Java的开发工具(参见第1点)

  5. 几款手机已经使用过Java ME,因此Java在业界是众所周知的

  6. 对于大多数应用来说,速度差异不是问题; 如果它是你应该用低级语言编码

  • 在VM上运行(因此无需重新编译)是一个巨大的优势.此外,它可以轻松地将进程彼此分开,防止恶意应用程序破坏您的手机或干扰其他应用程序 (5认同)
  • 内存保护是某些cpu架构的一部分.它可以防止恶意应用程序访问分配给其他应用程序的内存.http://en.wikipedia.org/wiki/Memory_protection (4认同)
  • @Falmarri:是的,确实如此。基本上它非常简单。您的应用已分配了自己的地址空间。您要访问的所有地址都由 MMU 翻译。您想访问地址 0x0000,然后 MMU 将其转换为例如 0x0E21。并且为了防止您更改基本地址,其特权指令和您的程序在由操作系统启动时分配了最低特权级别。如果没有,单个 CLI(禁用中断)指令会使系统崩溃.... (2认同)

Dav*_*ley 39

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

  • 是.Java是源代码,但它没有编译成与java虚拟机兼容的字节代码.这就是为什么他们可能大部分/全部的专利与sun/oracle争执.他们只使用语言的语法. (7认同)

Pet*_*ebb 20

系统稳定性的提高对于像手机这样的设备非常重要.

安全性更为重要.Android环境允许用户运行半可信任的应用程序,这些应用程序可能以非常不愉快的方式利用手机而没有出色的安全性.通过在虚拟机中运行所有应用程序,您可以保证除非VM实施中存在缺陷,否则任何应用程序都无法利用操作系统内核.反过来,VM实现可能很小,并且具有小的,明确定义的安全表面.

也许最重要的是,当程序编译为虚拟机的代码时,不必为新硬件重新编译它们.手机芯片的市场多种多样且变化迅速,因此这是一个大问题.

此外,使用Java可以降低人们编写的应用程序本身可以利用的可能性.没有缓冲区溢出,指针错误等...


Che*_*mon 13

本机代码不一定比Java代码快.您的个人资料数据在哪里显示本机代码可以更快地运行?

为何选择Java?

  • Android可在许多不同的硬件平台上运行.您需要为这些不同平台中的每个平台编译和优化本机代码,以查看任何真正的好处.

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

  • Java拥有巨大的开源支持,提供了许多库和工具,使开发人员的工作更轻松.

  • Java保护您免受本机代码中固有的许多问题的困扰,例如内存泄漏,错误的指针使用等.

  • Java允许他们创建沙盒应用程序,并创建更好的安全模型,以便一个糟糕的应用程序无法取消整个操作系统.


eri*_*son 6

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

其次,自1995年以来,我还没有看过Java字节码解释器.

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


Pab*_*ruz 5

Java 对于 Google 在 Android 中使用它有一个非常有说服力的理由:它拥有庞大的开发人员基础。所有这些开发人员都(某种程度上)准备好为其移动平台进行开发。

请记住,从技术上讲,Android 并不使用Java。

  • 我认为所有对移动开发感兴趣的人也对比 Java 更“酷”的语言感兴趣。 (2认同)

Jul*_*sLt 5

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

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

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

鉴于几乎所有虚拟机 JIT 都会编译为本机代码,原始代码速度通常与本机速度相当。与其他因素(复杂的对象运行时、通过边界检查“安全”检查内存访问等)相比,高级语言造成的许多延迟与虚拟机开销的关系较小。

另请记住,无论使用哪种语言编写应用程序,许多实际工作都是在较低级别的 API 中完成的。顶级语言通常只是将 API 调用链接在一起。

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